加载属性延迟加载

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#实现此问题或其他模式?

Pat*_*man 9

是否有更好的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)

  • 好吧,我想我应该得到downvote,因为我试图帮助你们误解VB.NET的"静态"...... (3认同)
  • 有人滥用系统,有一个upvote. (3认同)