2017-04-11 158 views
1

考慮下面的類訪問靜態成員靜態成員

class A 
{ 
public static int i; 
} 

class B 
{ 
public static A a{get;}=new A(); // without new A(), B.A will be null 
} 
現在

給出了一個新的實例,並自變量「i」的A類是靜態的,我可以不通過Ba訪問「我」即ie編譯時錯誤。

我明白,如果我不喜歡下面,

class B 
{ 
    static class A 
    { 
    static int i; 
    } 
} 

然後我可以做B.A.i.

所以我的問題是我怎樣才能訪問靜態成員的類的靜態成員?有沒有可能,還有什麼其他的模式可以使用。

還要注意的是使「A」級爲靜態,並且具有類「B」作爲

class B 
{ 
public static A a{get;} 
} 

給出一個編譯時間錯誤「靜態類型不能被用作返回類型」。

+7

如果你想得到我,只需A.i. B在這裏如何與之相關? – BoltClock

+0

我知道。只是想知道這是否可能。試圖實際學習模式。 – dividedbyzero

回答

1

由於iA的靜態會員,您可以直接使用它像

class B 
{ 
    public static A a {get;} = new A(); 
    public int ii{get;} = A.i; 
} 
+0

好的模式。我想不起來。但爲什麼返回靜態類型不允許? – dividedbyzero

+0

@dividedbyzero,你確定?導致只是檢查,它編譯好 – Rahul

+0

你可以分享你的代碼? – dividedbyzero

0

我怎樣才能訪問類的靜態成員的靜態成員?

如果事情是一個類的成員 - 靜態或不是靜態的 - 這意味着它是一個值或一個實例的東西參考。因此,如果你知道你有一個類的實例,但類有靜態成員本身,然後就訪問這些成員靜態:

class MyClass 
{ 
    public static string Value { get; } 
} 

string x = MyClass.Value; 
+0

「如果你知道你有一個類的實例,但該類本身具有靜態成員,那麼只需靜態訪問這些成員」我如何通過類的實例訪問靜態成員? – dividedbyzero

+0

你不......你只是通過課堂本身來訪問它,就像我的例子。 –

+0

我明白這一點。我的問題是通過B訪問我。 – dividedbyzero

0

你並不需要實例化一個類來訪問它的靜態成員。 只要你可以嘗試:

int value = A.i; 

如果你需要,你可以添加一個靜態類太:

public static class A 
{ 
public static int i; 
} 

,你可以在你的代碼的任何地方使用,如:

int value = A.i; 
+0

我正在通過B類訪問A.i。 – dividedbyzero

+1

class B {int value = A.i; } –

+0

好技術。但是我的擔心是每次財產增加A時,都需要在B處添加一行代碼。 – dividedbyzero