访问C#自动属性

5

自动属性在 .net 3 左右的版本中被添加到语言中,它会创建一个“私有”字段。使用以下代码:

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
1
你为什么要在getter中添加检查?检查应该在setter中。 - CodesInChaos
在我看来,懒加载被过度使用了。如果默认值可以在构造函数中赋值,那么就不需要检查构造了。懒加载适用于默认值昂贵且不经常使用的属性。根据我的经验,这种情况可能只会出现一百个属性中的一个。 - CodesInChaos
2个回答

6

自动属性的后备字段是匿名的,您无法从其getter或setter中访问它。

如果您需要在getter或setter中实现自己的逻辑,则您的属性也不再被视为自动属性。

自动属性只是为了节省输入和视觉上的繁琐,避免看到大量这样的代码:

private object _x;

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

3

您不能同时拥有“自动获取”和“手动设置”(或者“手动获取”和“自动设置”)。您必须同时拥有“手动”或“自动”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接