当我们定义一个属性时
public string Name {get; set;}
dot net 可以制作我们的属性代码。但是当我们使用
public string Name {get;}
public string Name {set;}
我们面对
'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.
其实为什么编译器不能自动判断属性并生成代码呢?有什么问题?
最佳答案
因为自动实现的属性会为属性值生成自己的后备存储。您无权访问内部商店。
用
实现一个属性- just get : 意味着您只能检索值。您永远无法设置属性值(即使在包含类中)
- just set : 表示您只能设置值。您无法检索属性值。
对于普通属性
private int _data;
public int Data{ get { return _data } };
在这里,父类可以在类中的其他地方执行以下操作(它不能使用 auto Prop )
_data = 100;
注意:您可以像这样定义一个自动属性(这是我最常使用的方式)。
public int Data { get; private set;}
这意味着该属性不能由类的外部客户端设置。但是,包含类本身可以通过类定义中的 this.Data = x;
多次设置该属性。
关于c# - 为什么自动实现的属性必须同时定义 get 和 set 访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597890/