.NET延迟加载/预先计算的属性

Nao*_*aor 0 .net c# properties

我的班级有复杂的财产:

    private Image m_LogoImage=null;

    public Image LogoImage
    {
        get
        {
            if (m_LogoImage == null && File.Exists(Data.LogoFileUrl))
            {
                DrawingImage image = DrawingImage.FromFile(Data.LogoFileUrl);
                m_LogoImage = Image.GetInstance(image, new Color(1, 1, 1));
            }
            return m_LogoImage;
        }
    }
Run Code Online (Sandbox Code Playgroud)

LogoImage.get是客户端第一次调用它时非常慢且耗费资源的操作,该属性计算图像并将结果存储在私有变量m_LogoImage中.
这对我来说非常基本..NET支持自动属性(public string P {get;set;}).它是否支持自动存储复杂的属性?

Ast*_*sti 5

存在许多基于状态的问题,因此懒惰负载没有语言级别的机制.

但是,您可以使用Lazy<T>该类来完成此功能.

 private Lazy<Image> logo = new Lazy(() => LoadImage()); 

 public Image LogoImage
    {
        get
        {
            return logo.Value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

您还可以使用null coalescing operator(??)为可空类型执行延迟加载.

get 
{
    return image ?? (image = LoadImage());
}
Run Code Online (Sandbox Code Playgroud)