LazyInitializer 类

定义

提供延迟初始化例程。

C#
public static class LazyInitializer
继承
LazyInitializer

示例

下面的示例演示如何使用 EnsureInitialized 使用布尔值来延迟初始化值,以跟踪初始化是否已发生,以及要用作相互排除锁的对象。

C#
ExpensiveData _data = null;  
bool _dataInitialized = false;  
object _dataLock = new object();  

//  ...  

ExpensiveData dataToUse = LazyInitializer.EnsureInitialized(ref _data, ref _dataInitialized, ref _dataLock);  

注解

这些例程避免需要分配专用延迟初始化实例,而是使用引用来确保在访问目标时已初始化目标。

方法

EnsureInitialized<T>(T)

在目标引用或值类型尚未初始化的情况下,使用其类型的无参数构造函数初始化目标引用类型。

EnsureInitialized<T>(T, Boolean, Object)

在目标引用或值类型尚未初始化的情况下,使用其无参数构造函数对其进行初始化。

EnsureInitialized<T>(T, Boolean, Object, Func<T>)

在目标引用或值类型尚未初始化的情况下,使用指定函数初始化目标引用或值类型。

EnsureInitialized<T>(T, Func<T>)

在目标引用类型尚未初始化的情况下,使用指定函数初始化目标引用类型。

EnsureInitialized<T>(T, Object, Func<T>)

在目标引用类型尚未初始化的情况下,使用指定函数初始化目标引用类型。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

线程安全性

LazyInitializer方法是线程安全的,可以同时从多个线程调用。

另请参阅