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; }
}
}