派生类上的静态成员值不同

本文关键字:静态成员 派生 | 更新日期: 2023-09-27 18:25:27

写入时:

public class A
{
    public static int v;
}
public class B : A { }
public class C : A { }

A.vB.vC.v的值都是相同的
如何使它们存储不同的静态值?

派生类上的静态成员值不同

A.v、B.v和C.v的值都是相同的
如何使它们存储不同的静态值?

你不能;A.vB.vC.v都引用同一个静态字段,因此它们不能有不同的值。

一个可能的解决方法是在BC:中重新声明v

public class A
{
    public static int v;
}
public class B : A
{
    public static new int v;
}
public class C : A
{
    public static new int v;
}

如果这样做,A.vB.vC.v将有效地引用不同的字段,因此它们可以具有不同的值。

(注意new修饰符;它告诉编译器您有意向基类隐藏成员)

根据您的具体需求,faester的解决方案可能会更好。

不要使它们成为静态的,而是使用虚拟只读属性来获得相同的效果:

public class A
{
    public virtual int v { get { return 1; } }
}
public class B : A { }
public class C : A
{
    public override int v
    {
        get { return 2; } 
    }
}