代码示例:
class MyClassA
{
public string A { get; }
public MyClassA(string a) {
A = a; //нет ошибки
}
}
class MyClassB
{
private string a;
public string A
{
get {return a}
}
public MyClassB(string a) {
A = a; // Ошибка (cannot be assigned to - it's readonly)
}
}
为什么,我完全不明白为什么在自动只读属性的情况下,可以在构造函数中向它们写入数据,而不能向普通属性写入数据?
如果只获取分配有明确定义的属性,您应该使用您认为合适的字段。编译器不会解析 getter 代码块来猜测您要分配的内容和位置。编译器的行为严格且明确,这是对它的要求。
这是一个根本没有字段的示例:
或者在另一个类中定义的字段:
或者甚至像这样:
当你想在构造函数中赋值时,你认为编译器应该做什么?
在自动属性的情况下,编译器将自动替换在汇编期间生成的字段。
如果要保护属性中的数据在有明确定义的字段时不被分配,并且只在构造函数中分配,请
readonly在字段上使用访问修饰符。