公共访问者与类的公共属性

时间:2011-09-22 15:32:21

标签: c#

  

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

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

 public string City { get; set; }
 public string City;

3 个答案:

答案 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)

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

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

使用属性,您可以控制_city的访问权限,例如“

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

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