>我有接口IDataHolder
,它定义了保存一些数据的属性和继承该接口的多个类。每个对象都可以具有类型为DataType
的唯一数据,该数据类型具有子类。但是在访问数据之前需要先生成数据。
使用该接口创建新类时,我总是需要在代码中的某处生成数据,这变成了重复性任务。现在我有两个选择:
private DataType data;
public DataType Data {get => data; set => data = value;}
public void Init()
{
Data = GenerateData();
}
还是更有利的...
private DataType data;
public DataType Data
{
get => data ? data : data = GenerateData();
set => data = value;
}
所以问题是:有没有更好的方法来创建在第一次调用时分配支持字段的属性?
完整代码示例:
public interface IDataHolder
{
DataType Data { get; set;}
}
public class Base
{
public T <T>GenerateData()
{
// data generation
}
}
public class Derived : Base, IDataHolder
{
private DataType data;
public DataType Data
{
get => data ? data : data = GenerateData();
set => data = value;
}
}
您可以使用Lazy<>
.
private Lazy<DataType> data = new Lazy<DataType>(GenerateData);
public DataType Data
{
get => data.Value;
}
第一次数据。调用 value,将从GenerateData
的结果中分配 value,每隔一段时间,它只会返回值。