w12*_*128 7 .net c# lazy-initialization
从.NET 4开始,Lazy<T>可以用来懒惰地初始化对象.直观地,懒惰初始化也可以在公共属性的getter中执行,以向调用者提供相同的功能.我想知道是否Lazy<T>提供了后者的任何固有优势,因此应该优先考虑?
就个人而言,我觉得Lazy<>可以迅速降低代码的可读性,但也许我刚看到它被误用了.从好的方面来说,它确保了线程的安全性,但是有很多.NET同步结构 - 也许我错了 - 让它很容易在getter中实现相同的功能.
选择最佳方法时需要注意哪些注意事项?
Lazy<> 可能很有用,因为它也支持多线程,你必须在创建自己的'懒惰'时自己构建.
对于不需要多线程的代码,在我看来,这将是性能最佳且可读的代码(使用null-coalescing运算符).
return variable ?? (variable = new ClassName());
Run Code Online (Sandbox Code Playgroud)
请注意,由于此代码不是线程安全的,因此最终可能会new ClassName()多次调用.
那么你应该介绍lock,并且可读性会降低.如果只是为了可读性,Lazy<>在这种情况下可能并不那么糟糕.
此外,Lazy<>在缓存属性的情况下,阻止您使用支持字段.
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |