【问题标题】:Main() doesn't want to access a class variableMain() 不想访问类变量
【发布时间】:2011-03-19 06:09:31
【问题描述】:

为什么我可以从“method()”而不是 Main() 方法访问 X 变量?

    class Program
    {
        int X;  // this is the variable I want access

        static void Main(string[] args)
        {
            int a;
            a = X; // this doesnt work, but why?
        }
        void metodo()
        {
            int b;
            b = X; //this works, but why?
        }
    }

【问题讨论】:

    标签: c# class variables scope methods


    【解决方案1】:

    试试

    static int X
    

    X 是一个实例变量,这意味着您的类的每个实例都有自己的X 版本。然而,Main 是一个静态方法,这意味着对于 Program 类的所有实例只有一个 Main,因此访问 X 没有任何意义,因为可能有多个 X 或可能有如果没有创建 Program 实例,则根本没有。

    使 X 自身静态,意味着所有 Program 实例将共享 X,因此共享方法将能够访问它。

    【讨论】:

      【解决方案2】:

      Main() 是一个静态函数。不能从静态函数访问非静态变量。

      【讨论】:

        【解决方案3】:

        X 是一个实例变量,但Main 是一个静态方法,即它不与class Program 的任何特定实例相关联。

        【讨论】:

          【解决方案4】:

          Xmetodo() 都在实例级别。 Main() 处于静态级别。如果您希望X 可用于Main()metodo,则需要将其声明为静态(即private static int X)。

          【讨论】:

            【解决方案5】:

            要访问 X,您需要使用 static 关键字标记它或创建 Program 类的实例:

            1.

            static int X
            

            2.

            static void Main(string[] args)
                    {
                        int a;
                        var program = new Program();
                        a = program.X; 
                    }
            

            您应该阅读更多关于类成员和类实例成员的信息。

            【讨论】:

              【解决方案6】:

              假设你有一个带有两个变量的 Person 类:

              • 眼睛颜色
              • 眼数

              眼睛的数量属于类(静态),而眼睛的颜色属于每个实例。

              如果您将眼睛的数量从 2 更改为 3,那么世界上的每个人都会立即拥有 3 只眼睛,因为所有实例共享相同的静态变量。

              如果您将某个人的眼睛颜色从蓝色更改为红色,那么只有该人的眼睛会是红色的。

              如果您能够访问静态方法中的非静态成员,它会取什么值?由于没有明智的答案,因此不允许发生。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-05-15
                • 2012-04-16
                • 2012-07-16
                • 1970-01-01
                • 2011-10-31
                • 1970-01-01
                • 2015-08-12
                相关资源
                最近更新 更多