延迟初始化 就是在第一次使用的时候在 进行类的初始化
public class Student { public Student() { this.Name = "DefaultName"; this.Age = 0; Console.WriteLine("Student is init..."); } public string Name { get; set; } public int Age { get; set; } }
public static void Main(string[] args) { Lazy<Student> stu = new Lazy<Student>(); if (!stu.IsValueCreated) Console.WriteLine("Student isn't init!"); Console.WriteLine(stu.Value.Name); stu.Value.Name = "Tom"; Console.WriteLine(stu.Value.Name); Console.Read(); }
输出:
Student isn't init!
Student is init...
DefaultName
Tom
他是在输出Name属性时才进行初始化的,也就是在第一次使用时才实例化,这样就可以减少不必要的开销。