C#抽象类中的常量字段

3

我在抽象类中声明const字段遇到了问题。这是为什么?

编辑

我应该澄清一下。我的问题是我的子类看不到const字段:

protected const string Prefix = "dynfrm_";

如果我删除const关键字,我可以从孙子类中访问它。

鉴于你已经得到答案指向解决方案,你应该展示更多的代码。如果我们实际看到了你的代码,问题就会变得更加清晰明了。 - Dustin Campbell
这就是为什么我要求错误信息的原因 :) - KevDog
5个回答

4
public abstract class Class1
{
    protected const string Prefix = "dynfrm_";
}

public class Class2 : Class1
{
    public void GetConst()
    {
        Console.WriteLine(Prefix);
    }
}

3

请看下面的内容...

abstract class MyBase
{
    protected const int X = 10;
}
class Derived : MyBase
{
    Derived()
    {
        Console.WriteLine(MyBase.X);
    }
}

MyBase 在 C# 中就是基类。此外,base.myConstFiled 对我不起作用。 - Ronnie Overby
1
base是C#中表示当前类的基类的关键字。MyBase是Gishu在他的示例代码中声明的抽象类。 - Timothy Carter

2

看起来正常工作:

public abstract class Class1
{
    protected const int Field1 = 1;
}

public class Class2 : Class1
{
    public int M1()
    {
        return Field1;
    }
}

我正在使用Visual Studio 2008 SP1,从一个后代中看到了protected const,并且编译结果符合预期。


1
你把常量至少设置为protected了吗?如果是private的话,子类就无法访问它,就像它不是抽象类一样。
编辑:我看到你发布了一个示例,并指定了它为protected,这对我来说可以工作。你有关于发生什么的描述吗?编译错误?运行时错误?

如果一个类被定义为抽象的,那么它永远不能被初始化。这难道不会阻止编译器初始化一个本质上是静态的常量吗? - Brownman98

0
只要您在声明中初始化它,就不应该有问题。您收到了什么错误消息?

错误信息?太棒了!“无法使用实例引用访问;请改为使用类型名称限定。”我这样做了,它起作用了。我猜当使用const关键字时,它就像静态的处理。 - Ronnie Overby
我试图使用this.Field进行访问。 - Ronnie Overby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接