LazyInitializer.EnsureInitialized方法,通过System.Threading可以完成延时初始化属性的功能,具体请参考官网
这是该方法的源码,在net core5.0的runtime源码中,很遗憾没有任何实现,所以只能参考官网的解释,进行使用,下面是使用这个方法需要注意的点
(1)、作用
Initializes a target type if it hasn't already been initialized.说明这个类是用来初始化的实例的.
(2)、注意点
i、This method may only be used on reference types. 该方法只对引用类型有效.
ii、valueFactory
may not return a null 实例工厂不得返回空引用
vi、
(3)、
代码语言:javascript复制 class Program
{
static void Main(string[] args)
{
var tool = new Tool();
tool.ConfigureMin();
tool.ConfigureMax();
tool.PrintOption();
Console.ReadKey();
}
}
public class Tool
{
public void ConfigureMax()
{
Option.Max = "Max";
}
public void ConfigureMin()
{
Option.Min = "Min";
}
public void PrintOption()
{
Console.WriteLine($"Max:{Option.Max}");
Console.WriteLine($"Min:{Option.Min}");
}
private Option _option;
public Option Option
{
get
{
if (_option == null)
{
_option= new Option();
}
return _option;
}
set
{
_option = value;
}
}
}
public class Option
{
public string Max { get; set; }
public string Min { get; set; }
}
这是常用得写法,在日常开发中经常会遇到.两个方法(ConfigureMax、ConfigureMin)操作同一个属性(Option),且两个方法各自的操作之后的结果要在同一线程中被保留.