我目前正在修改一个广泛使用的类,将尽可能多的昂贵初始化从类构造函数移至惰性初始化属性中。下面是一个示例(使用c#语言):
修改前:
public class ClassA
{
public readonly ClassB B;
public void ClassA()
{
B = new ClassB();
}
}
之后:
public class ClassA
{
private ClassB _b;
public ClassB B
{
get
{
if (_b == null)
{
_b = new ClassB();
}
return _b;
}
}
}
在我正在修改的类中有更多这样的属性,某些属性在特定情况下不会被使用(因此需要懒加载),但如果它们被使用,则很可能会被重复调用。
不幸的是,这些属性通常也在类内部使用。这意味着私有变量(_b)有可能被方法直接使用而没有初始化。
是否有一种方法只使公共属性(B)在类内部可用,或者甚至具有相同的按需初始化的替代方法?
这是从程序员(显然不够主观)重新发布的: https://softwareengineering.stackexchange.com/questions/34270/best-methods-for-lazy-initialization-with-properties
Lazy<>
类非常简单,如果您经常使用此模式,您可能希望考虑自己编写它。 - mqpClassB
的唯一方法是调用.Value
,如果同事这样做了(因为他不知道属性),那么一切都没问题。就个人而言,我认为除此之外再去费力和增加代码行数是不值得的。 - mqpLazyThreadSafetyMode
枚举。它解决了这个问题。 - mqp