从.net 4开始,Lazy<T>可以用来惰性地初始化对象。直观地说,惰性初始化也可以在公共属性的getter中执行,以向调用方提供相同的功能。我想知道Lazy<T>是否比后者有任何固有的优势,因此应该优先考虑?
就我个人而言,我觉得Lazy<>可以很快降低代码的可读性,但也许我刚刚看到它被误用了。从好的方面来说,它确保了线程安全,但是有许多.NET同步结构——也许我错了——使得在getter中实现同样的结构变得非常容易。
在选择最佳方法时需要注意什么?

最佳答案

Lazy<>可能很有用,因为它还包含了对多线程的支持,这是在创建自己的“lazy”时必须构建的东西。
对于不需要多线程的代码,这将是我认为性能最好、可读性最好的代码(使用空合并运算符)。

return variable ?? (variable = new ClassName());

请注意,由于此代码不是线程安全的,因此您可能会多次调用new ClassName()
那么你应该引入locking,可读性就会降低。如果只是为了可读性,Lazy<>在这种情况下可能不会那么糟糕。
此外,Lazy<>还防止在缓存属性的情况下使用backing字段。

关于c# - 在getter中,Lazy <T>是否应优先于惰性初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28901763/

10-13 05:34