2013-03-23 222 views
0

我有一個靜態類稱爲A聲明非靜態類靜態

public static class A 
{ 
} 

而另一個類稱爲B,這也不是一成不變的:

public class B 
{ 
} 

在那之後,我宣佈非靜態類B靜態:

public class c 
{ 
    // declare a non static class (B) as static 
    public static B b = new B(); 
} 

什麼是diff A(靜態類)和b(非靜態類聲明爲靜態類)之間的差異?

+0

一個是靜態的,另一個不是? – Oded 2013-03-23 16:35:06

回答

3

static class你可以只有聲明靜態成員(方法,字段,屬性)。在非靜態類中,可以聲明靜態成員和實例(非靜態)成員。另外,你不能從一個靜態類派生一個類,或者直接使用它,或者將它作爲一個類型參數使用。


當你定義一個靜態成員:

public static B b = new B(); 

...那麼你是說B類型的本場b只屬於你宣佈它在類型的非靜態字段的歸屬。到類型的一個實例。


例如,如果您有:

class MyClass 
{ 
    public static string myStaticString = ""; 

    public string myInstanceString = ""; 
} 

然後如果你改變了myInstanceString,它的價值將只用於特定實例改變:

MyClass myInstance1 = new MyClass(); 
MyClass myInstance2 = new MyClass(); 
myInstance1.myInstanceString = "1"; 
myInstance2.myInstanceString = "2"; 
Console.WriteLine(myInstance1.myInstanceString); // Prints: 1 
Console.WriteLine(myInstance2.myInstanceString); // Prints: 2 

但是,如果你改變myStaticString,其價值將改變爲所有使用該類型的人:

MyClass.myStaticString = "1"; 
MyClass.myStaticString = "2"; 
Console.WriteLine(MyClass.myStaticString);  // Prints: 2 

而這與string(或您的示例中的B)是否被聲明爲static完全無關。

+1

而且,當然,你不能實例化一個靜態類(或者說,你只能有一個它的實例)。 – Oded 2013-03-23 16:35:34