繁体   English   中英

将非静态类声明为静态

[英]Declaring a non-static class as static

我有一个称为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 (声明为静态类的非静态类)之间A什么区别?

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

区别在于静态变量静态类之间的区别。 b是非静态类型B的静态变量,但是A是静态类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM