为什么自动实现的属性必须同时定义get和set访问器

Nas*_*loo 32 c# get properties accessor set

当我们定义一个属性时

    public string Name {get; set;}
Run Code Online (Sandbox Code Playgroud)

dot net可以使我们的属性代码.但是当我们使用时

    public string Name {get;}
    public string Name {set;}
Run Code Online (Sandbox Code Playgroud)

我们面对

'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.
Run Code Online (Sandbox Code Playgroud)

实际上为什么编译器无法确定属性并自动生成代码?有什么问题?

Gis*_*shu 59

因为自动实现的属性为属性值生成自己的后备存储.您无权访问内部商店.

用.实现属性

  • just get:意味着你只能检索这些值.您不能设置属性值(即使在包含类中)
  • 只是设置:表示您只能设置值.您无法检索属性值.

对于正常的财产

private int _data;
public int Data{  get { return _data } };
Run Code Online (Sandbox Code Playgroud)

这里的父类可以在类中的其他地方执行以下操作(它不能使用自动道具)

_data = 100;

注意:你可以像这样定义一个auto-prop(这是我最常用的方式).

public int Data { get; private set;}
Run Code Online (Sandbox Code Playgroud)

这意味着该类的外部客户端无法设置该属性.但是,包含类本身可以this.Data = x;在类定义中多次设置属性.

  • 也可能值得一提"私人套装"作为中间地面解决方案(它可能是OP实际上正在寻找的" (2认同)

Joe*_*Joe 5

如果没有setter,则该属性永远不会具有除默认值之外的任何内容,因此不会用于任何目的.

  • @supercat他们已经为C#6做了这个.它被称为只有getter的自动属性. (3认同)