Main()不想访问类变量

时间:2010-07-21 21:32:26

标签: c# class variables scope methods

为什么我可以从“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?
        }
    }

6 个答案:

答案 0 :(得分:13)

尝试

static int X

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

假装你有一个包含两个变量的Person类:

  • 眼睛颜色
  • 眼睛数目

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

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

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

如果您能够访问静态方法内的非静态成员,它将需要什么值?由于没有明智的答案,所以不允许发生。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

1

static int X

2

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

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