Kan*_*ini 5 c# variables initialization
我正在阅读MCTS Self Paced Training Kit(70-536)Edition 2,在第1章我们有以下内容.
如何声明值类型变量要使用类型,必须首先将符号声明为该类型的实例.值类型具有隐式构造函数,因此声明它们会自动实例化类型; 您不必像处理类一样包含New关键字.构造函数为新实例分配一个默认值(通常为null或0),但是您应该始终在声明中显式初始化该变量,如以下代码块所示:
'VB
Dim b As Boolean = False
// C#
bool b = false;
Run Code Online (Sandbox Code Playgroud)
但是,当我编译以下控制台应用程序时,
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译时错误
"使用未分配的局部变量b"
在勘误表中甚至没有提到它.我做错了还是这本书完全错了?
Pie*_*kel 13
必须先分配局部变量才能使用它们.但是,类字段会获得其默认值.
一个例子:
public bool MyMethod()
{
bool a;
Console.Write(a); // This is NOT OK.
bool b = false;
Console.Write(b); // This is OK.
}
class MyClass
{
private bool _a;
public void MyMethod()
{
Console.Write(_a); // This is OK.
}
}
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 12
这本书在VB方面基本上是正确的,但在这种情况下它没有提到VB和C#之间的区别.
在VB中,所有局部变量都会自动初始化:
Sub Test()
Dim x As Integer
MessageBox.Show(x.ToString()) 'shows "0"
End Sub
Run Code Online (Sandbox Code Playgroud)
虽然在C#中局部变量没有初始化,但编译器不允许你使用它们,直到它们为:
void Test() {
int x;
MessageBox.Show(x.ToString()); // gives a compiler error
}
Run Code Online (Sandbox Code Playgroud)
此外,还不清楚本书的引用是否实际上是在讨论局部变量或类成员变量.在VB和C#中创建类实例时,始终会初始化类成员变量.
当它说"值类型具有隐式构造函数"时,这本书是错误的.那明显是错的.值类型初始化为其默认值(如果已初始化),并且在发生这种情况时不会调用构造函数.
归档时间: |
|
查看次数: |
7385 次 |
最近记录: |