我第一次尝试使用延迟加载来初始化我班级中的进度对象。但是,我收到以下错误:
字段初始值设定项不能引用非静态字段,方法或属性。
private Lazy<Progress> m_progress = new Lazy<Progress>(() =>
{
long totalBytes = m_transferManager.TotalSize();
return new Progress(totalBytes);
});
在.NET 2.0中,我可以执行以下操作,但我更愿意使用更新的方法:
private Progress m_progress;
private Progress Progress
{
get
{
if (m_progress == null)
{
long totalBytes = m_transferManager.TotalSize();
m_progress = new Progress(totalBytes);
}
return m_progress;
}
}
有人可以帮忙吗?
非常感谢。
答案 0 :(得分:24)
该初始值设定项需要将this
传递给捕获类,并且字段初始化程序无法使用this
。但是, 在构造函数中可用:
private readonly Lazy<Progress> m_progress;
public MyType()
{
m_progress = new Lazy<Progress>(() =>
{
long totalBytes = m_transferManager.TotalSize();
return new Progress(totalBytes);
});
}
就个人而言,我只是使用get
访问者; p