use*_*035 4 c# vb.net design-patterns lazy-evaluation
我有一个属性,getter应该只在第一次加载它的值.第二次返回加载的值而不再加载它:
private Object _MemberValue;
public Object MemberValue
{
get
{
if(_MemberValue == null)
{
_MemberValue = LoadMember();
}
return _MemberValue;
}
}
Run Code Online (Sandbox Code Playgroud)
在VB.NET中有Static关键字.有了它,您不必声明一个类宽成员.
Public Property MemberValue as Object
Get
Static value as Object = Nothing
If (value is Nothing) Then
value = LoadMember()
End If
Return value
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
在C#中没有这样的关键字.
是否有更好的C#实现此问题或其他模式?
是否有更好的C#实现此问题或其他模式?
可能不是.Lazy<T>如果您愿意,可以使用替换,但基本上它与您的第一个示例相同.Static在VB.NET 中使用有一些严重的缺点,所以我不会以任何方式使用它.
如果您愿意Lazy<T>,这就是我要使用的:
private Lazy<object> _MemberLazy = new Lazy<object>(LoadMember);
public object MemberValue
{
get
{
return _MemberLazy.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3821 次 |
| 最近记录: |