将非静态类声明为静态

时间:2013-03-23 16:34:00

标签: c# static static-methods non-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(声明为静态类的非静态类)之间有什么区别?

2 个答案:

答案 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是静态类。