C#的Lazy与LazyInitializer
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //初始化 Lazy 类的新实例 6 //当延迟初始化发生时,将使用指定的初始化函数和初始化模式 7 // 参数: 8 // valueFactory: 9 // 调用用于在需要时生成延迟初始化值的委托。 10 // 11 // isThreadSafe: 12 // 若要使此实例可同时由多个线程使用,则为 true;若要使此实例一次只能由一个线程使用,则为 false。 13 Lazy<String> lazy = new Lazy<String>(() => 14 { 15 return DateTime.Now.ToLongTimeString(); 16 }, true); 17 18 //false(还未查询Value) 19 Console.WriteLine(lazy.IsValueCreated); 20 Console.WriteLine(lazy.Value); 21 //true(已经查询Value) 22 Console.WriteLine(lazy.IsValueCreated); 23 Thread.Sleep(3000); 24 //3秒后,Value值不变 25 Console.WriteLine(lazy.Value); 26 27 string str = null; 28 //如果str未被初始化则使用"String1."初始化str 29 LazyInitializer.EnsureInitialized(ref str, () => "String1."); 30 //输出String1. 31 Console.WriteLine(str); 32 33 //str已经初始化过,不会再被初始化,因此不会变为"String2." 34 LazyInitializer.EnsureInitialized(ref str, () => "String2."); 35 //输出String1. 36 Console.WriteLine(str); 37 38 Console.ReadLine(); 39 } 40 }