2011-03-16 94 views
5

自动性能添加到语言中有关.NET 3,营造出“私人”领域,反正使用的代码:访问自动属性 ​​- C#

public string foo {get;set;} 

是否有可能真正得到任何形式的参考这个私人领域?

我要像做

public string foo {get{/*some code to check foo for nulls etc*/};set;} 

不失这种自动性质特征和写作类似

private string _foo = null; 
public string foo{get{_foo==null?_foo="hello"; return _foo;}set{_foo=value;}} 
+6

这不会使它成为一个自动属性,会吗? – BoltClock 2011-03-16 09:57:25

+1

为什么你要在* getter *中添加支票?检查应该在* setter *中。 – CodesInChaos 2011-03-16 09:59:40

+0

IMO延迟初始化过度使用。如果默认值是检查构造只是在构造函数中分配它。延迟初始化适用于缺省值构建起来并且不总是使用的属性。根据我的经验,这可能是一百个属性中的一次。 – CodesInChaos 2011-03-16 10:03:10

回答

6

The backing field of an automatic property is anonymous;你不能从它的getter或setter中访问它。

如果你需要在你的getter或setter中实现你自己的逻辑,那么你的属性不会被认为是自动的了。

汽车性能只是有保存打字看到的枯燥和不顺眼,这些众人:

private object _x; 

public object X 
{ 
    get { return _x; } 
    set { _x = value; } 
} 
3

你不能有一个“自动”获得和“手册”集(或“手动”获得一个“自动”设置)。您必须同时具有“手动”或两者都是“自动”。