无法分配静态只读字段(静态构造函数除外)

时间:2011-04-23 22:49:30

标签: c# debugging syntax

abstract class DirectiveNode
{
    public static readonly RequirementOptions ArgumentOptions = RequirementOptions.Optional;
}

class IfNode : DirectiveNode
{
    static IfNode()
    {
        ArgumentOptions = RequirementOptions.Required; // error here
    }

我不明白这个问题。我以为static IfNode()是一个静态构造函数?为什么会出错?


刚刚发现:Assigning to static readonly field of base class

2 个答案:

答案 0 :(得分:4)

您只能在相同类的静态构造函数中分配它。

顺便说一句,听起来你希望静态字段包含不同的值,具体取决于你所说的派生类。这不是它的工作原理。只存在该字段的单个实例,并且它在所有派生类中共享。

答案 1 :(得分:3)

与非静态构造函数不同,子类的静态构造函数与父静态构造函数没有关系。如果希望子类能够更改基类函数使用的ArgumentOptions值,请考虑虚拟属性:

abstract class DirectiveNode
{
    public virtual RequirementOptions ArgumentOptions
    {
        get { return RequirementOptions.Optional; }
    }
}

class IfNode : DirectiveNode
{
    public override RequirementOptions ArgumentOptions
    {
        get { return RequirementOptions.Required; }
    }
}