3

我们知道,如果一个类是静态的,那么类内的所有成员都必须是静态的;静态类中不能有任何实例成员。如果我们尝试这样做,我们会得到一个编译时错误。

但是如果在静态方法中有一个实例成员,我不会收到编译时错误。

    public static class MyStaticClass
    {
        // cannot do this
        //int i;

        // can do this though.
        static void MyStaticMethod()
        {
            int j;
        }
    }
4

3 回答 3

2

它不是实例成员,它的 ( j) 是静态方法内的局部变量。

考虑遵循非静态类。

public class MyStaticClass
{
    int i; //instance member
    static void MyStaticMethod()
    {
        i = 0; // you can't access that
    }
}

上面的类有一个实例成员i,你不能在静态方法中访问它。

于 2013-10-01T16:44:32.877 回答
2
static void MyStaticMethod()
{
   int j;
}

(j)您的静态方法中有一个局部变量。

从MSDN获取您的信息:

如果你想保证一个类不能被实例化,不能从另一个类型派生或用作另一个类型的基,并且只能包含静态成员,你可以将一个类定义为静态的。

在第一次访问静态成员之前以及在调用静态构造函数(如果有的话)之前初始化静态成员。

于 2013-10-01T16:47:28.583 回答
2

静态方法和属性不能访问其包含类型中的非静态字段和事件,并且它们不能访问任何对象的实例变量,除非它在方法参数中显式传递。

public class MyStaticClass
{
    static int j; //static member
    int i;//instance member
    static void MyStaticMethod()
    {
        i = 0; // you can't access that
        j = 0; // you can access 
    }
}
于 2013-10-01T16:58:04.677 回答