public interface IHandler
{
List<string> Run();
}
public class Base
{
void methodA();
}
public Class Der1 : Base , IHandler
{
List<string> Run()
{ //Generate huge records
}
}
public Class Der2 : Base , IHandler
{
List<string> Run()
{//Generate huge records
}
}
public Class Der3 : Base , IHandler
{
List<string> Run()
{//Generate huge records
}
}
当前Run()正在所有派生类中执行并生成相同的记录集。我想要优化它。
将Run()内的RecordGeneration进程移动到公共类/函数并执行一次并准备必要的记录。所有Derived类都将使用此“RecordGeneration”来获取已生成的记录。
注意:我无法实现Singleton模式。
答案 0 :(得分:2)
您可以使用Lazy<T>
:
private Lazy<List<string>> l;
public Der1
{
l = new Lazy<List<string>>(() => Run());
}
public List<string> ResultOfRun
{
get
{
return l.Value();
}
}
要扩展我的初始答案,如果方法在所有方法中具有相同的输出,则可以执行以下操作:
public class Base
{
private Lazy<List<string>> l = new Lazy<List<string>>(() => RunStatic());
private static List<string> RunStatic()
{
//
}
public List<string> ResultOfRun
{
get
{
return l.Value();
}
}
void methodA();
}
然后你只需要在Run
中调用它,如果它实现了接口,它可以在基类中:
public Class Der1 : Base , IHandler
{
List<string> Run()
{
return this.ResultOfRun;
}
}