当我写:
public class A
{
public static int v;
}
public class B : A { }
public class C : A { }
和的值A.v
都相同。
如何让它们存储不同的静态值?B.v
C.v
当我写:
public class A
{
public static int v;
}
public class B : A { }
public class C : A { }
和的值A.v
都相同。
如何让它们存储不同的静态值?B.v
C.v
Av、Bv 和 Cv 的值都相同。
如何让它们存储不同的静态值?
你不能;A.v
,B.v
并且C.v
都引用同一个静态字段,所以它们不能有不同的值。
一种可能的解决方法是v
在B
and中重新声明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.v
,B.v
和C.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; }
}
}