abstract class DirectiveNode
{
public static readonly RequirementOptions ArgumentOptions = RequirementOptions.Optional;
}
class IfNode : DirectiveNode
{
static IfNode()
{
ArgumentOptions = RequirementOptions.Required; // error here
}
我不明白这个问题。我以为static IfNode()
是一个静态构造函数?为什么会出错?
答案 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; }
}
}