只读成员包括只读字段和只读属性。如果不希望在初始化后修改数据成员,就可以把他们变成只读成员。
1、只读字段
介绍:声明时使用 readonly修饰,放在类型前,与 static 可以更换修饰顺序,只能在构造函数中分配值。
区分:实例字段,静态字段,只读实例字段,只读静态字段,常量
public class MyClass
{
// 实例字段,可以在类的外部改变他的值
public int aa = 3;
// 静态字段,可以通过类名访问,也可以在类外修改
public static int dd = 3;
// 只读实例字段,尽管是公有的,除了本类(注意:只有本类,子类是只读)的构造函数,其他地方只读
public readonly int bb = 3;
// 只读静态字段,只能在静态构造函数中做初始化,其他地方只读
public static readonly int bb1 = 3;
// 常量(隐式静态的),不能加上static修饰符,在类外可以通过类名访问
public const int cc = 3;
public MyClass()
{
// 在构造函数中,可以对只读实例字段进行赋值
bb = 4;
}
static MyClass()
{
// 在静态构造函数中,可以对只读静态字段进行赋值
bb1 = 5;
}
}
变量与常量相关介绍:点击打开链接
静态构造函数介绍链接:点击打开链接
2、只读属性介绍:只有get,没有set,只可以读取,只能在构造函数中赋值。
public class Monkey
{
// 私有字段,表示猴子的腿的数量
private int num;
// 只读属性,(只有get,没有set),只允许在构造函数中初始化属性的值
public int GetNum
{
get{return num;}
}
}