我有以下财产
public MyType MyProperty {get;set;}
Run Code Online (Sandbox Code Playgroud)
我想更改此属性,以便如果值为null,它将首先填充该值,然后返回它...但不使用私有成员变量.
例如,如果我这样做:
public MyType MyProperty
{
get
{
if (_myProperty != null)
return _myProperty
else
_myProperty = XYZ;
return _myProperty;
}
set
{
_myProperty = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?或者我需要成员变量才能完成它?
Jon*_*eet 35
您需要一个成员变量和一个完整的属性声明.自动实现的属性仅在它们是字段周围的平凡包装器时才适用,不涉及逻辑.你可以稍微简化你的getter代码,顺便说一下:
get
{
if (_myProperty == null)
{
_myProperty = XYZ;
}
return _myProperty;
}
Run Code Online (Sandbox Code Playgroud)
(请注意,如果没有额外的锁定,这些都不是线程安全的,但我认为没关系.)
顺便说一句,如果你使用自动实现的属性,你已经有了一个私有成员变量 - 只是编译器为你生成它.
Kla*_*sen 10
你能做的最好的事情是在构造函数中给它一个值.我知道这样你就失去了"延迟加载",但你不能同时拥有自动属性和延迟加载.
| 归档时间: |
|
| 查看次数: |
40432 次 |
| 最近记录: |