为什么我不能在静态类中拥有实例成员,但我可以在静态方法中拥有实例成员

本文关键字:实例 成员 拥有 我可以 静态方法 为什么 不能 静态类 | 更新日期: 2023-09-27 18:33:25

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

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

    public static class MyStaticClass
    {
        // cannot do this
        //int i;
        // can do this though.
        static void MyStaticMethod()
        {
            int j;
        }
    }

为什么我不能在静态类中拥有实例成员,但我可以在静态方法中拥有实例成员

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

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 
    }
}

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

请考虑遵循非静态类。

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

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

static void MyStaticMethod()
{
   int j;
}

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

对于来自 MSDN 的信息:

如果要保证将类定义为静态 不能实例化,不能派生自或用作其基础 另一种类型,并且只能包含静态成员。

在访问静态成员之前初始化静态成员 第一次和在静态构造函数之前,如果有的话, 被称为。