在第一次调用时初始化属性支持字段的更好方法



>我有接口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,每隔一段时间,它只会返回值。

最新更新