请考虑以下代码:
public class Order
{
public int OrderID { get; set; }
public DateTime OrderDate { get; set; }
public decimal Total { get; set; }
}
我不明白{ get; set; }
是什么意思。
我通常使用get
和set
,如下所示:
class Person
{
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
set
{
name = value;
}
}
}
那么,{ get; set; }
意味着什么?
感谢名单
答案 0 :(得分:7)
单独使用{ get; set; }
可以完全转换为您通常使用的内容..它只是简写。
编译器会创建一个自动后备字段。
所以这个:
public string FirstName { get; set; }
..编译为:
private string _firstName;
public string FirstName {
get {
return _firstName;
}
set {
_firstName = value;
}
}
这一切都发生在编译时,因此您无法直接访问支持字段(因为在编译代码之前它实际上不可用)。
编译器转换完上面后..自动属性实际上变成了方法。
所以上面的内容变成了这个:
public void set_FirstName(string value) {
_firstName = value;
}
public string get_FirstName() {
return _firstName;
}
然后生成一些IL来通知像Visual Studio这样的工具它们是属性而不是方法..有点像这样:
.property instance string FirstName() {
.get instance string YourClass::get_FirstName()
.set instance void YourClass::set_FirstName(System.String)
}
答案 1 :(得分:6)
这些是自动实现的属性。
编译器将为您提供支持字段。但是,您无法直接访问该字段。
在C#3.0及更高版本中,当属性访问器中不需要其他逻辑时,自动实现的属性使属性声明更简洁。它们还使客户端代码能够创建对象。 当您声明属性时,如下例所示,编译器会创建一个私有的匿名支持字段,只能通过属性的get和set访问器进行访问。
在MSDN上阅读更多内容:Auto-Implemented Properties (C# Programming Guide)