C# 中如何代码段有错误:
1 int i = 0; 2 string text; 3 4 for(i = 0;i < 10;i++) 5 { 6 text = "Line " + Convert.ToString(i); 7 Console.WriteLine("{0}", text); 8 } 9 Console.WriteLine("First Console App: {0}",text); // 错误 CS0165 使用了未赋值的局部变量“text”
书上的解释如下:
必须在使用变量前对其进行声明和初始化,而 text 是在 for 循环中初始化的。赋给 text 的值在循环块退出时就丢失了。
这与 C++ 语言的差别是明显的。如下代码,定义一个 class 后,先是声明这个类的一个变量;然后在一个代码块中初始化这个变量。在退出这个代码块后,此变量的内容还是存在的,因为没有超过此变量的定义范围。除非,在代码块中调用 delete 来释放此变量。
1 class testVarInit 2 { 3 public: 4 testVarInit() 5 { 6 printf("init "); 7 } 8 ~testVarInit() 9 { 10 printf("deinit "); 11 } 12 }; 13 14 15 int _tmain(int argc, _TCHAR* argv[]) 16 { 17 testVarInit *test; 18 { 19 test = new testVarInit(); 20 // delete test; 21 } 22 getchar(); 23 return 0; 24 }