2013-03-23 256 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