Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么静态类中不能有实例成员,而静态方法中可以有实例成员?_C#_.net_Oop - Fatal编程技术网

C# 为什么静态类中不能有实例成员,而静态方法中可以有实例成员?

C# 为什么静态类中不能有实例成员,而静态方法中可以有实例成员?,c#,.net,oop,C#,.net,Oop,我们知道,如果一个类是静态的,那么该类中的所有成员都必须是静态的;静态类中不能有任何实例成员。如果我们尝试这样做,我们会得到一个编译时错误 public static class MyStaticClass { // cannot do this //int i; // can do this though. static void MyStaticMethod() { in

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

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

        // can do this though.
        static void MyStaticMethod()
        {
            int j;
        }
    }
但如果在静态方法中有一个实例成员,则不会出现编译时错误

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

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

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

static void MyStaticMethod()
{
   int 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)

有关您的信息,请访问:

如果要保证类是静态的,可以将其定义为静态的 无法实例化,无法派生或用作的基础 另一个类型,并且只能包含静态成员

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


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

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

谢谢你,李兹!我现在明白了,即使静态类被允许有实例变量,也不能访问它们。