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

最佳答案

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

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

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

10-06 00:17