不管在任何编程语言中都有变量的定义,变量就像是一个容器,不同的变量会在内存中占据不同大小的内存空间。定义变量后会将分配的地址绑定在这个变量名上,以后对该变量名的操作就是对该内存地上存储内容的操作。
namespace test
{class myTest{int loop = 0; //实例成员变量static int num = 0; //静态成员变量public static int value = 10; //全局变量void Main(){int m = 0; //局部变量for (int i = 0; i < 100; i++){//i为局部变量,其作用域仅为for循环体内Console.WriteLine(i);}}}
}
成员变量:在类中定义的变量,在整个类中都有效,类中定义的方法都可以使用该变量。成员变量又可以分为实例成员变量和静态成员变量。
- 静态成员变量:使用static修饰的成员变量,static用于把属性和方法绑定到类本身,而不是使用类创建的对象。使用静态成员变量时直接使用类名称进行调用,无论用户使用该类创建了多少个对象,静态成员变量始终只有一个,始终绑定到类本身,每个创建的对象中并不存在该静态成员变量。
- 实例成员变量:实例成员变量是绑定使用类创建的对象上的,要想使用实例成员变量,必须先使用类创建一个对象。使用实例成员变量时是使用对象名进行调用,使用同一类创建的多个对象中各自有自己的实例成员变量,互相隔离,互不干扰。
局部变量:在方法体中定义的变量,其使用范围只局限在定义它的方法之中或者方法之中的循环体之内,作用域不超过一个大括号
全局变量:在类中定义的变量用static修饰的变量为全局变量,在整个namespace中的所有类中都可以使用
需要注意的是:定义变量时不能在同一作用域内定义相同名称的变量
注意:
1)C#中定义的变量在使用之前必须进行初始化,否则编译器会报错
大多数的现代编译器并未将未初始化的变量标记为警告,例如在C语言中就可以再定义变量后不赋值就进行使用,此时变量中存储的是垃圾值,但C#编译器将使用未初始化的变量作为错误。
C#中有两种方法可确保变量在使用前对其进行初始化:
- 变量是类或结构中的字段,如果没有显式初始化,创建这些变量时,其值就默认是0(类和结构在后面讨论)
- 方法中定义的局部变量必须在代码中显式初始化,之后才能在语句中使用该变量。此时,初始化不是在声明该变量时进行的,但编译器会通过方法检查所有可能的路径,如果检测到局部变量在初始化之前就使用了它的值,就会产生错误