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

标签 c# get properties set accessor

当我们定义一个属性时

    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/

相关文章:

c# - 有没有办法在不使用设计器的情况下为 C# 中的控件添加事件处理程序?

c# - 为什么 C# 结构实例方法在结构字段上调用实例方法首先检查 ecx?

php - 如何在 PHP 中动态访问类 const?

java - 无法读取 Maven 属性

Java 系统属性和环境变量

c# - 使用未知数量的未知类型 - .NET

c# - 关于 SharePoint 2010(控件、Web 部件、主题、母版页)的所有信息

node.js - 如何在 Node JS 的本地变量中存储 GET 请求的响应

ajax - firebug 网络监视器选项

Javascript getter/setter 作用域访问