我有一个名为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();
}
A
(静态类)和b
(声明为静态类的非静态类)之间有什么区别?
答案 0 :(得分: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 :(得分:0)
区别在于 static variable 与 static class 之间的差异。 b
是非静态类型B
的静态变量,但A
是静态类。