2013-07-28 32 views
1

当我写:不同的静态成员的值

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

A.vB.vC.v值都是一样的。
如何让他们存储不同的静态值?

+5

你不能,这是静态的方面之一。 –

+1

如果你不想要这样的效果,那你为什么从同一个类中派生出来? – jAC

+0

http://msdn.microsoft.com/en-us/library/vstudio/79b3xss3.aspx – MahanGM

回答

4

A.v,B.V和C.V的值都是一样的。
如何让他们存储不同的静态值?

你不能; A.v,B.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的解决方案可能会更好。

+0

它似乎不可能没有重新宣布他们或类似的东西。 – Yves

4

不要让他们静态的,而是用虚拟的只读属性,以获得相同的效果:

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