我正在阅读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/

10-17 02:39