在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 完全无关。