2011-08-01 50 views
2

我读有关的变量的作用域一些C#文本并得到了一些困惑:C#中的作用域变量?

案例1:

class A 
{ 
    void F() { 
     i = 1; 
    } 
    int i = 0; 
} 

案例2

class A 
{ 
    void F() 
    { 
     i = 1; // Error, use precedes declaration 
     int i = 0; 
    } 
} 
两个 case 12

,变量i是在声明和初始化之前使用,但为什么案例2出错? (我读过一个解释,因为我是情况1中的全局变量,但仍然想知道是否有另一种解释)

回答

7

int i是情况1中的类变量。当定义类时,所有变量在class的范围内定义,并非每个method也被定义。

在情况2中,您将变量定义为method的一部分,并在您使用它之后。

0

当您在类代码块中声明变量时,使其成为一个成员变量,该变量至少可用于该类中的任何函数。如果您创建另一个功能,它也可以引用“我”。当类的对象被实例化时,你的变量被剥离。

它在第二类中不起作用,因为它事先没有被声明。

1

对于案例1,变量i被声明为一个实例变量,因此如果您首先声明一个使用它的函数,然后再声明变量,那么它非常有效,因为当您调用该方法时,变量自动被初始化。

对于案例2,变量i是该函数的局部变量,因此无法像这样做。