Bé *_*a 3 16 c# properties accessor
为什么我们能写
public int RetInt
{
   get;set;
}
代替
public int RetInt
{
   get{return someInt;}set{someInt=value;}
}
两者有什么区别?
Hab*_*bib 25
此功能称为自动实现的属性,并随C#3.0一起引入
在C#3.0及更高版本中,当属性访问器中不需要其他逻辑时,自动实现的属性使属性声明更简洁.它们还使客户端代码能够创建对象.当您声明属性时,如以下示例所示,编译器将创建一个私有的匿名支持字段,该字段只能通过属性的get和set访问器进行访问.
class Customer
{
    // Auto-Impl Properties for trivial get and set 
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }
对于你的问题
两者有什么区别?
在你的情况下,没有.由于您在设置或检索值时没有做任何事情,但假设您想要进行某些验证或想要执行其他类型的检查,那么:
private int someInt;
public int RetInt
{
    get
    {
        if (someInt > 0)
            return someInt;
        else
            return -1;
    }
    set { someInt = value; } // same kind of check /validation can be done here
}
使用自动实现的属性无法完成上述操作.
另一个可以看出区别的是初始化自定义类类型属性.
如果你有MyClass 
Normal 列表,那么在Normal属性的情况下,它的支持字段可以被初始化/实例化而不是构造函数.
private List<MyClass> list = new List<MyClass>();
public List<MyClass> List
{
    get { return list; }
    set { list = value; }
}
如果是Auto实施的属性,
public List<MyClass> SomeOtherList { get; set; }
您只能SomeOtherList在构造函数中初始化,而不能在Field级别执行此操作.
这两者有何不同?
有不同的至少 2点:
someInt在您的情况下)set/get,而在auto属性中则不能这样做.换句话说:如果您需要"只是属性",请使用自动属性,如果您需要对工作流程进行更多控制(引发事件set,调试,运行其他内容),请使用"普通"属性.
| 归档时间: | 
 | 
| 查看次数: | 1018 次 | 
| 最近记录: |