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;}).它是否支持自动存储复杂的属性?
存在许多基于状态的问题,因此懒惰负载没有语言级别的机制.
但是,您可以使用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)