gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:34:42 24 4
gpt4 key购买 nike

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 中不受支持。

关于c# - 分配给基类的静态只读字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com