c# - 具有空访问器或没有访问器的属性之间的区别

标签 c#

<分区>

具有空访问器和没有访问器的属性之间的区别?

// Property with empty accessors
public string Name { get; set; }

// Property without accessor
public int Counter;

编辑:

编译器声明之外的含义意味着什么

最佳答案

实际上第二个不是属性,它是公共(public)字段。

C# 中的属性只是两种方法的快捷方式 - 访问器和修改器(或获取和设置)。所以,当你写一些像

这样的属性时
private string _name;

public string Name 
{ 
   get { return _name; } 
   set { _name = value;  }
}

编译器实际上会创建两个方法

public string get_Name() { return _name; }
public void set_Name(string value) { _name = value; }

当你写的时候

public string Name { get; set; } 

然后编译器将生成这两个方法并为您生成后备存储(字段_name)。

当你不使用getset时,它就是简单的字段(如_name),编译器不会生成任何方法.

第二个问题: What is the difference between a field and a property in C#

因为属性实际上是一个方法,它们可以是抽象的或虚拟的,可以被覆盖。属性可以是接口(interface)的一部分。属性可用于数据绑定(bind)。您可以向属性添加任何逻辑(例如引发某些事件、延迟加载或执行验证)。您可以为设置和获取属性定义不同的访问级别(例如私有(private)和公共(public))。对于公共(public)领域,这一切都不是真的。

关于c# - 具有空访问器或没有访问器的属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204527/

相关文章:

c# - devenv CruiseControl 的记录器

c# - 获取数组中最接近的值

c# - 有多个 DoWorkEventHandlers 是不好的做法吗?

C# WebBrowser 控件 - 忽略网站安全警告

javascript - window.location.reload() 在 Firefox 中不起作用

c# - 如何在运行时设计报告 SSRS

c# - 将命名空间设置为 XElement

c# - 使用 ASP.NET 通过 SSH 自动化 Unix 服务器

c# - 用于检测 C# 中新字段/属性添加的单元测试

c# - 在 python 中使用 ctypes 访问 C# dll 的方法