我设置属性Name是只读的,但它仍然可以分配.
class Person
{
public string Name { get; }
public Person(string name)
{
Name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
尝试将值设置为property Name:
var p = new Person("Kevin");
Console.WriteLine(p.Name); //output: Kevin
p.Name = "John"; //Property or indexer 'Person.Name' cannot be assigned to -- it is read only
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么吗?
Jon*_*eet 13
它只能在构造函数或初始化程序中为属性声明赋值 - 就像只读字段只能在构造函数或字段初始值设定项中分配一样.
将不会生成属性setter - 编译器将使用只读字段,并在构造函数中初始化它.因此,生成的代码将大致相当于:
class Person
{
private readonly string _name;
// Old school: public string Name { get { return _name; } }
public string Name => _name;
public Person(string name)
{
_name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
这是巨大的,能够做到这一点是有用的,我真的很高兴它被添加到C#6.
| 归档时间: |
|
| 查看次数: |
1294 次 |
| 最近记录: |