1

当我写:

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

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

4

2 回答 2

3

Av、Bv 和 Cv 的值都相同。
如何让它们存储不同的静态值?

你不能;A.v,B.v并且C.v都引用同一个静态字段,所以它们不能有不同的值。

一种可能的解决方法是vBand中重新声明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 的解决方案可能会更好。

于 2013-07-28T21:40:20.377 回答
2

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

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; } 
    }
}
于 2013-07-28T21:03:18.373 回答