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

时间:2013-07-28 20:56:04

标签: c#

当我写:

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

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

2 个答案:

答案 0 :(得分:4)

  

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

你不能; A.vB.vC.v都指向相同的静态字段,因此它们不能具有不同的值。

可能的解决方法是在vB中重新声明C

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的解决方案可能会更好。

答案 1 :(得分:3)

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

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