Lazy加载的Value应该是单例的,也就是说不会重新创建对象。以下代码验证了这个事实。
先创建一个Person类:
public class Person
{
public Person(string userName, int age)
{
this.UserName = userName;
this.Age = age;
}
public string UserName { get; set; }
public int Age { get; set; }
public float Num { get; set; } = new Random().Next(1, 10000);
public void Show()
{
Console.WriteLine($"我的名字是{this.UserName},年龄:{this.Age},随机数:{Num},当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")}");
}
}
然后写个测试:
public Lazy<Person> personLazy = new Lazy<Person>(() => { return new Person("刘备", 38); });
[TestMethod]
public void TestLazy()
{
for (var i = 0; i < 10; i )
{
personLazy.Value.Show();
System.Threading.Thread.Sleep(500);
}
var p1 = personLazy.Value;
var p2 = personLazy.Value;
Console.WriteLine(string.Format("p1==p2:{0}", object.Equals(p1, p2)));
for (var i = 0; i < 10; i )
{
new Person("刘备", 38).Show();
System.Threading.Thread.Sleep(500);
}
var p3 = new Person("刘备", 38);
var p4 = new Person("刘备", 38);
Console.WriteLine(string.Format("p3==p4:{0}", object.Equals(p3, p4)));
}
得到的结果,验证了这个事实,可以发现Lazy生成的实例属性随机数没有改变,而原生创建的对象属性随机数一直在变化。
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:30:411
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:30:918
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:31:418
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:31:918
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:32:418
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:32:918
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:33:418
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:33:918
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:34:418
我的名字是刘备,年龄:38,随机数:8184,当前时间:2023-05-06 15:14:34:918
p1==p2:True
我的名字是刘备,年龄:38,随机数:9449,当前时间:2023-05-06 15:14:35:418
我的名字是刘备,年龄:38,随机数:1577,当前时间:2023-05-06 15:14:35:918
我的名字是刘备,年龄:38,随机数:3703,当前时间:2023-05-06 15:14:36:418
我的名字是刘备,年龄:38,随机数:5829,当前时间:2023-05-06 15:14:36:918
我的名字是刘备,年龄:38,随机数:7956,当前时间:2023-05-06 15:14:37:418
我的名字是刘备,年龄:38,随机数:83,当前时间:2023-05-06 15:14:37:918
我的名字是刘备,年龄:38,随机数:2209,当前时间:2023-05-06 15:14:38:418
我的名字是刘备,年龄:38,随机数:7924,当前时间:2023-05-06 15:14:38:926
我的名字是刘备,年龄:38,随机数:51,当前时间:2023-05-06 15:14:39:426
我的名字是刘备,年龄:38,随机数:2177,当前时间:2023-05-06 15:14:39:926
p3==p4:False