什么是{得到; set;}意思是?

时间:2013-11-21 02:30:32

标签: c# getter-setter

请考虑以下代码:

   public class Order
    {
        public int OrderID { get; set; }
        public DateTime OrderDate { get; set; }
        public decimal Total { get; set; }
    }

我不明白{ get; set; }是什么意思。

我通常使用getset,如下所示:

class Person
{
    private string name;  // the name field 
    public string Name    // the Name property
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}

那么,{ get; set; }意味着什么?

感谢名单

2 个答案:

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