2010-07-21 65 views
4

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

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

回答

12

尝试

static int X 

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

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

5

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

1

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

3

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

0

要访问你需要或者X采用静态关键字标记,或创建程序类的实例:

1.

static int X 

2.

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

你应该多看课堂上的成员以及课堂实例的成员。

4

假装你有两个变量Person类:

  • 眼睛的颜色
  • 数量眼睛

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

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

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

如果你能够访问一个静态方法内的非静态成员,它会需要什么值?既然没有理智的答案,那就不允许发生。