Stu*_*egg 8 c# recommendation-engine lazy-initialization c#-3.0
我正在改变一个广泛使用的类,将类昂贵的初始化从类构造函数移动到Lazy Initialized属性.下面是一个例子(在c#中):
之前:
public class ClassA
{
public readonly ClassB B;
public void ClassA()
{
B = new ClassB();
}
}
Run Code Online (Sandbox Code Playgroud)
后:
public class ClassA
{
private ClassB _b;
public ClassB B
{
get
{
if (_b == null)
{
_b = new ClassB();
}
return _b;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我正在改变的类中有更多这些属性,有些在某些情境中没有使用(因此是懒惰),但如果使用它们,它们可能会被重复调用.
不幸的是,这些属性通常也在课堂内使用.这意味着私有变量(_b)有可能被方法直接使用而不进行初始化.
有没有办法只在类中提供公共属性(B),或者甚至是在需要时初始化的替代方法?
这是从程序员转发的(显然不够主观):https: //softwareengineering.stackexchange.com/questions/34270/best-methods-for-lazy-initialization-with-properties
mqp*_*mqp 16
好吧,我推荐的解决方案是告诉你的同事使用这个属性,而不是现场.但你可以在某种程度上像这样傻逼它:
public class ClassA
{
private Lazy<ClassB> _b = new Lazy<ClassB>(() => new ClassB());
public ClassB B
{
get
{
return _b.Value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在搞砸了很难.