出售域名 11365.com.cn
有需要请联系 16826375@qq.com
在手机上浏览
在手机上浏览

验证Lazy懒加载的单例模式

发布日期:2023-05-06

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