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显示了各种数据类型的默认值。

4.1.3 变量的初始化 - 图1

[1]这里调用的是int类型的默认构造函数。