公共访问器与类的公共属性[重复]

Posted

技术标签:

【中文标题】公共访问器与类的公共属性[重复]【英文标题】:Public accessors vs public properties of a class [duplicate] 【发布时间】:2011-11-22 23:06:54 【问题描述】:

可能重复:What is the difference between a field and a property in C#

有人可以解释这两个属性之间的差异吗?

 public string City  get; set; 
 public string City;

【问题讨论】:

【参考方案1】:

第一个是实际属性。第二个只是一个字段。

一般来说,字段应该保留private 并且存储实际数据。属性实际上并不存储任何数据,但它们指向字段。在上面的 auto-property 的情况下,它会在后台自动生成一个隐藏字段,比如 _city 来保存数据。

希望这会有所帮助!

【讨论】:

【参考方案2】:

第一个是 CLR 属性,而第二个只是公共字段(不是属性)。

在 WPF 和 Silverlight 中,绑定不适用于公共字段,它仅适用于公共属性。这是我认为的一个主要区别:

 //<!--Assume Field is a public field, and Property is a public property-->
 <TextBlock Text="Binding Field"/>
 <TextBlock Text="Binding Property"/>

第一个不起作用,但第二个会起作用。

【讨论】:

【参考方案3】:

正如 mellamokb 所说。第一种是Property,编译器会自动生成访问函数和私有字段,如:

private String _city;
public String City()  return  _city ;
.....

使用Properties,可以控制_city的访问权限,例如"

public String City()  
doXxxFunction();
return  _city ;

所以,您应该始终使用该属性,并确保所有字段都是私有的。

【讨论】:

以上是关于公共访问器与类的公共属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

属性与公共成员变量[重复]

面向对象三大特性总结

打字稿装饰器与类继承

类的公共成员及其访问

Ruby高级编程面向对象

Objective C - 使用属性获取访问器与直接使用 iVar