加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 分配给基类的静态只读字段

发布时间:2020-12-15 04:07:17 所属栏目:百科 来源:网络整理
导读:public class ClassA{ public static readonly string processName;} public class ClassB : ClassA{ static ClassB() { processName = "MyProcess.exe"; }} 我在编译上面的C#代码时遇到错误. 错误说 – “无法分配静态只读字段(静态构造函数或变量初始化程
public class ClassA
{
    public static readonly string processName;
} 

public class ClassB : ClassA
{
    static ClassB()
    {
        processName = "MyProcess.exe";
    }
}

我在编译上面的C#代码时遇到错误.

错误说 – “无法分配静态只读字段(静态构造函数或变量初始化程序除外)”

但我在静态构造函数中分配它.

对这种静态变量的需求是,基类具有使用此变量的方法,但派生类和基类必须具有此变量的不同值.但是,相应类的所有实例的值都是恒定的.它必须是只读的,因为它不能被任何地方改变.

上面代码中的错误是什么? (如果有的话)我似乎无法发现一个.错误消息没有帮助.因为我根据它没有做错任何事.

如果出现错误,我该如何实现此功能?我知道一个简单的解决方法是使它成为一个实例变量,并在派生类中为它们分配不同的值.但这是不必要的,因为值在各个类的所有实例中都是恒定的.

解决方法

你在错误的静态构造函数中分配.它只能在静态构造函数中为声明变量的类型赋值.

假设你有另一个派生自ClassC的类,它做同样的事情 – 你最终会覆盖变量,这意味着只读.这里有一个静态变量,但是你有很多派生类.

一个答案是避免使用静态变量但将虚拟属性放在基类中,并使每个派生类覆盖该属性以返回不同的常量:

public class ClassA
{
    public virtual string ProcessName { get { return "ClassAProcess"; } }
} 

public class ClassB : ClassA
{
    public override string ProcessName { get { return "MyProcess.exe"; } }
}

基本上选项是将“静态”位分隔成一个单独的层次结构 – 实际上听起来你想要在类型而不是实例上使用多态,而.NET中不支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读