我正在阅读MCTS自定进度培训套件(70-536)第2版,在第一章中,我们有以下内容。
'VB
Dim b As Boolean = False
// C#
bool b = false;
但是,当我编译以下控制台应用程序时,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch1_70_536
{
class Program
{
static void Main(string[] args)
{
bool b;
Console.WriteLine("The value of b is " + b);
Console.ReadKey();
}
}
}
我收到编译时错误
Errata中甚至没有提到它。我做错什么了吗?或者这本书完全错了吗?
最佳答案
这本书在谈到VB时基本上是正确的,但是在这种情况下,它没有提到VB和C#之间的区别。
在VB中,所有局部变量都会自动初始化:
Sub Test()
Dim x As Integer
MessageBox.Show(x.ToString()) 'shows "0"
End Sub
虽然在C#中未初始化局部变量,但编译器将不允许您使用它们,除非它们是:
void Test() {
int x;
MessageBox.Show(x.ToString()); // gives a compiler error
}
另外,尚不清楚书中的引言是否实际上是在谈论局部变量或类成员变量。在VB和C#中创建类实例时,总是会初始化类成员变量。
当它说“值类型具有隐式构造函数”时,这本书是错误的。那明显是错的。值类型被初始化为其默认值(如果已初始化),并且在发生这种情况时不会调用构造函数。
关于c# - 为什么必须初始化C#局部变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4182666/