我无法理解为什么C#3.0中存在自动实现的属性语言功能.
你说的时候有什么不同
public string FirstName;
Run Code Online (Sandbox Code Playgroud)
比
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
Cha*_*ana 20
因为它们在生成的IL代码(和机器语言)中的实现方式不同.自动属性仍然作为公共getter和setter公开,而公共字段就是 - 单个字段..
因此,实现auto属性允许您稍后更改getter或setter的内部行为(如添加验证程序),而无需重新编译或重新编码任何使用它的依赖类...
只是为了添加其他人所说的,声明一个公共字段,该字段可以读取和写入.声明公共自动属性,虽然属性是公共的,但您仍然可以添加修饰符来控制get/set级别的可访问性.
public string FirstName { get; private set; }
Run Code Online (Sandbox Code Playgroud)
您的类的用户将FirstName视为公共属性.但是,他/她不能写信给它.
考虑如果您以后想要将每个属性更改为具有自定义实现的属性会发生什么.如果它是自动实现的属性,您只需添加一个字段并更改实现.完整的源代码和二进制兼容
如果它是一个开头的字段,则既没有源也没有二进制兼容性.您必须重建引用它的所有内容,并修复不再编译的任何内容.
此外,物业在各个领域具有各种优势.我对字段的主要个人反对意见是它暴露了API中的实现决策.