从.net 4开始,Lazy<T>
可以用来惰性地初始化对象。直观地说,惰性初始化也可以在公共属性的getter中执行,以向调用方提供相同的功能。我想知道Lazy<T>
是否比后者有任何固有的优势,因此应该优先考虑?
就我个人而言,我觉得Lazy<>
可以很快降低代码的可读性,但也许我刚刚看到它被误用了。从好的方面来说,它确保了线程安全,但是有许多.NET同步结构——也许我错了——使得在getter中实现同样的结构变得非常容易。
在选择最佳方法时需要注意什么?
最佳答案
Lazy<>
可能很有用,因为它还包含了对多线程的支持,这是在创建自己的“lazy”时必须构建的东西。
对于不需要多线程的代码,这将是我认为性能最好、可读性最好的代码(使用空合并运算符)。
return variable ?? (variable = new ClassName());
请注意,由于此代码不是线程安全的,因此您可能会多次调用
new ClassName()
。那么你应该引入
lock
ing,可读性就会降低。如果只是为了可读性,Lazy<>
在这种情况下可能不会那么糟糕。此外,
Lazy<>
还防止在缓存属性的情况下使用backing字段。关于c# - 在getter中,Lazy <T>是否应优先于惰性初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28901763/