2013-07-28 40 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; } 
    } 
}