В 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
.
Один статический, а другой нет? – Oded