MSDN 官方的解释
readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中.
我的理解是:
public class tt
{
private readonly int i=5;
}
或者
public class tt
{
private readonly int i;
public tt(int j)
{
i=j;
}
}
跟const不一样的地方时:可以在构造函数里面赋值,另外可以支持如DateTime等const不支持的类型。
但是,但是,但是,赋值这件事情对一些集合类型来说相当于new,不等于add、remove,如
public class tt
{
private readonly List<int> items;
public tt()
{
items=new List<int>();
}
public Add(int i)
{
items.Add(i);//这是允许的
}
public void ReNew()
{
items=new List<int>();//这是不允许的
}
}
这样做的好处在于可以避免程序在其他地方重新初始化变量(我以为)。