关于C#:公共访问器与类的公共属性


Public accessors vs public properties of a class

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between a field and a property in C#

有人能解释一下这两种属性之间的区别吗?

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

第一个是实际属性。第二个只是一个场。

一般来说,字段应该保存在cx1〔0〕中,并且存储实际数据。属性实际上不存储任何数据,但它们指向字段。在上述auto属性的情况下,它将自动生成一个隐藏字段,比如后台的city来保存数据。

希望这有帮助!


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

在WPF和Silverlight中,绑定不与公共字段一起工作,它只与公共属性一起工作。这是我认为的一个主要区别:

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

第一个不行,但第二个不行。


正如梅拉莫克所说。第一种类型是属性,编译器将自动生成访问函数和私有字段,如:

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

使用属性,您可以控制"城市"的访问,例如"

1
2
3
4
public String City(){  
doXxxFunction();
return  _city ;
}

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