1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 作用域研究__及其影响 7 { 8 class Program 9 { 10 11 static void Main(string[] args) 12 { 13 语句的读取顺序 Sequence = new 语句的读取顺序(); 14 string s = Sequence.Test("希望测试通过"); 15 Console.ReadKey(); 16 } 17 } 18 19 class 语句的读取顺序 20 { 21 22 public 语句的读取顺序() 23 { 24 25 } 26 27 public string Test(string a) 28 { 29 A = a;//怎么局部变量A在声明之前就可以使用呢? 30 for(int i=0;i<5;i++) 31 { 32 B = i; 33 } 34 /* 35 错误:局部变量“B”在声明之前无法使用 但是怎么局部变量A在声明之前就可以使用呢? 36 */ 37 int B; 38 Console.WriteLine(B); 39 Console.WriteLine(A); //怎么局部变量A在声明之前就可以使用呢? 40 string s= "成功运行"; 41 return s; 42 } 43 string A; 44 } 45 }
这个程序调试的错误是错误:局部变量“B”在声明之前无法使用。可我就不明白,怎么变量A的使用【 A = a;Console.WriteLine(A);】却可以在声明string A 之前使用。
希望老师们指导,学生彩笔,对运行时库 CRL不懂,对于new一个对象时,类的创建顺序不懂,我原本认为,string A的变量A也是有问题的,因为上课时,老师总是说“程序是逐语句,顺序读取的”,那么在读取代码的第29行( A = a;)的时候,那么第43行声明(string A),也没有读取到啊?声明老师们指导,对我进行教育,普及一下知识,我知道我在这里,对知识点非常模糊。
A 是类的成员变量,不是局部变量,声明对象时就创建 赋值了, B是方法的 局部变量,执行到B时 才会在堆栈创建。
“A 是类的成员变量,声明对象时就创建 赋值了”,你的这一句,我不太懂啊?我对A变量的赋值是在public string Test(string a)方法中,创建时,我没有给A变量赋值呢?你怎么说创建时,就赋值了???
A 相当于“class 语句的读取顺序” 的成员变量,所以可以在成员函数内使用
变量B也是“class 语句的读取顺序” 的成员变量,只不过是放在方法内而已
@黑夜猫头鹰: 你还是好好看看局部变量的概念吧
代码快的编译是从上到下的,B还没申明怎么可以使用呢
那么变量A的使用也是29行,而声明在43行,怎么就可以使用呢
@黑夜猫头鹰: A是全局的啦
经过各位老师指点,学生好像明白了。一个类的成员,都是全局变量,一个方法函数内的变量都是局部变量。一个全局变量的声明,可以放在方法函数的后面,是因为:当我们的编译器进行编译时,就需要new一个对象实例,这时类的成员都被初始化赋值(否则赋一个null值),当我们调用方法时,方法内含有的类成员变量早都声明初始化了。最终还是符合那句话“变量先赋值初始化,再使用”