2013-04-08 140 views
0

對不起,提出這樣一個簡單的問題,但我還沒有找到答案通過搜索。在c中訪問一個實例類的靜態類型#

那麼,在c#中,是否有可能通過類的一個實例訪問一個類的字段(其值不需要改變),以及如何使用類的靜態字段班級的名字?

例如,如果我有

public class Myclass 
{ 
    public int a = 0; 
} 

我想在代碼中的其他地方做的,另一類

Myclass instance = new Myclass(); 
int b = instance.a; 

int c = Myclass.a; 

製作INT靜態或const沒有按沒有幫助,有沒有辦法做到這一點?感謝任何答案。

+0

那麼你想靜態訪問一個實例字段,在這種情況下,你想要哪些實例值,或者你想通過實例訪問一個靜態字段,在這種情況下,爲什麼你需要這樣做,而不是通過類直接訪問它? – Servy 2013-04-08 18:47:43

+0

預處理器指令如何,如果您需要通過它們不能訪問它們? – SGM1 2013-04-08 18:52:46

+0

我想使用實例訪問靜態字段。這是因爲我有15個具有相同類型靜態字段的類,我想通過以相同方式處理所有類來簡化代碼,甚至可以不通過創建var實例來爲不同類重複代碼 – HyApp 2013-04-08 19:03:52

回答

0

如果MyClass是一個單身人士然後是的,你可以這樣做,但在你的情況下,它似乎是一個不會,因爲你在別處實例化它。看,如果MyClass是一個單身,你可以做這樣的事情:

public class MyClass 
{ 
    private static MyClass _instance = new MyClass(); 

    public static MyClass Instance { get { return _instance; } } 

    public int A { get; set; } 
    public static int a { get { return _instance.A; } } 

    private MyClass() { } 
} 

但你可以看到它是真正哈克。你真的在這裏混合了面向對象的概念。訪問static值 - MyClass.a - 與實例值之間存在明顯差異。只需處理創建實例。

0

這是不可能的。如果沒有該類型的實例,則無法訪問實例字段,並且無法通過C#中的類型實例訪問靜態字段,您需要通過類型本身來訪問它。

0

據我所知,這是不可能的。可能是你需要改變執行方式。

0

這是不可能做到這一點,是因爲:

(1)語言阻止你通過一個實例引用訪問靜態字段,

(2)你不可能有相同的兩個領域名稱。 (所以你不能有一個靜態的,具有相同名稱的非靜態字段)。

0

可能不是一個好主意,不過,你也許能夠做這樣

class Class1 
{ 
    public static int staticBlah = 0; 

    public int blah { 
     get{return Class1.staticBlah;} 
     set{Class1.staticBlah = value;} 
    } 


} 

當然,你並沒有使用,而是使用相同的名字,但你會訪問同一個變量。

相關問題