public int Age { get; set; }
OR
public int Age;
Run Code Online (Sandbox Code Playgroud)
在Main内部,如果我创建这个新Person.以上两条线是完全相同的正确吗?
Dan*_*Tao 10
不正确.第一行是自动实现的属性,第二行是公共字段.它们既不是二进制兼容的,也不是语义上完全相同的.通常,属性是优选的,因为它们的灵活性以及它们可用于封装数据的事实(尽管它们经常被滥用).
但就编译器生成的内容而言,该属性创建了一个自动备份字段,实质上是两个方法("getter"和"setter")来访问它.这个领域就是:一个领域.
由于存在这些差异,实际上您的两个示例的行为方式有很多种:
ref或out参数,诸如的一个Interlocked方法.int您没有可变值类型(例如Point),则该属性不允许您直接修改该值,因为它将返回该字段的副本.(要修改字段,您需要将属性返回的值分配给局部变量,修改本地,然后将其分配回属性.)该字段实际上允许您正确地修改该值.作为一个侧面说明,3点以上是许多开发商利用来反对行为的类型的例子曾经设计可变的值类型.