我想知道为什么在C#中不允许在类类型的自动生成属性中仅使用{set}属性,如:
class Person {
public string Name { set; } // Compile-time error
}
Run Code Online (Sandbox Code Playgroud)
但是,在接口类型中允许:
interface IPerson {
string Name {set;} //Allowed
}
Run Code Online (Sandbox Code Playgroud)
我在这里读到类似的问题,这是非常罕见的做法 - 我理解,但我想知道为什么CLR甚至允许这样做?
Zei*_*kki 10
原因很简单.如果您正在使用自动实现的属性(生成隐藏的私有字段).那么为什么你需要设置一个你永远无法获得的值(并随后使用).
对于接口,您没有使用自动实现的属性,它只是一个契约,指定实现类应该具有一个名为Name应该实现Setter方法的字符串属性.所以,你可以这样做:
interface IPerson
{
string Name { set; }
}
class Person : IPerson
{
private string _name;
public String Name
{
set { _name = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
总而言之,C#编译器试图阻止我们做一些没有任何意义的事情:为私有隐藏字段提供永远无法获取的自动设置方法.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |