可能重复:
What is the difference between a field and a property in C#
有人可以解释这两个属性之间的差异吗?
public string City { get; set; }
public string City;
答案 0 :(得分:7)
第一个是实际财产。第二个只是一个领域。
一般来说,字段应保留private
并存储实际数据。属性实际上不存储任何数据,但它们指向字段。在上面的自动属性的情况下,它将在后台自动生成像_city这样的隐藏字段来保存数据。
希望这有帮助!
答案 1 :(得分:1)
第一个是CLR属性,而第二个是公共字段(不是属性)。
在WPF和Silverlight中,绑定不适用于公共字段,它仅适用于公共属性。这是我认为的一个主要区别:
//<!--Assume Field is a public field, and Property is a public property-->
<TextBlock Text="{Binding Field}"/>
<TextBlock Text="{Binding Property}"/>
第一个不起作用,但第二个起作用。
答案 2 :(得分:0)
private String _city;
public String City(){ return _city ;}
.....
使用属性,您可以控制_city的访问权限,例如“
public String City(){
doXxxFunction();
return _city ;
}
所以,你应该总是使用该属性,并确保所有字段都是私有的。