4.1.3 变量的初始化
基于安全性考虑,C#对变量的初始化有一定要求:
❑所有的局部变量在被显式地初始化之前,都会被编译器当作未初始化,然后抛出编译期异常;
❑所有的字段级变量被编译器初始化为所属类型中等价于0的值。如布尔型的被初始化为false,
数值型的被初始化为0或者0.0,所有的引用类型都被初始化为null。举例说明,如代码清单4-1所示。
代码清单4-1 未赋值的局部变量
using System;
namespace ProgrammingCSharp4
{
class Person
{
private int Age;
public void SayHello()
{
string message;
Console.WriteLine(message);
}
}
}
上述代码中有两个变量,一个字段级变量Age,一个局部变量message,当我们编译这段代码的时候会产生如下错误:
使用了未赋值的局部变量"message"
这是因为我们没有给局部变量message赋值初始化,而Age变量是字段级变量,可以被编译器自动初始化为0。知道了错误的原因,我们对上述代码进行修改,如代码清单4-2所示。
代码清单4-2 已赋值的局部变量
using System;
namespace ProgrammingCSharp4
{
class Person
{
private int Age;
public void SayHello()
{
string message="My age is{0}";
Console.WriteLine(message,Age);
}
static void Main(string[]args)
{
Person person=new Person();
person.SayHello();
}
}
}
在上述代码中,我们使用字符串"My age is{0}"初始化了局部变量message,然后把message的值和Age变量的值一起输出到了控制台,这里的{0}是个占位符,意味着它的位置会被Age的值所取代。代码清单4-2运行的结果如下:
My age is 0
这也印证了字段级的变量会被编译器自动初始化,它被初始化为该类型的初始值0。
提示 可以使用int myInt=new int()[1];来初始化局部变量,它等同于int myInt=0;
表4-1显示了各种数据类型的默认值。
[1]这里调用的是int类型的默认构造函数。