我最近在 .Net 中了解了 Lazy 类,并且可能已经过度使用它。我在下面有一个示例,其中可以以急切的方式评估事物,但是如果一遍又一遍地调用,这将导致重复相同的计算。在这个特定示例中,使用 Lazy 的成本可能无法证明其好处,我对此不确定,因为我还不了解 lambda 和惰性调用的成本。我喜欢使用链接的 Lazy 属性,因为我可以将复杂的逻辑分解成小的、可管理的块。我也不再需要考虑初始化东西的最佳位置在哪里——我需要知道的是,如果我不使用它们,它们将不会被初始化,并且会在我开始使用它们之前被初始化一次。然而,一旦我开始使用惰性和 lambda,原本简单的类现在变得更加复杂。我无法客观地决定何时这是合理的,何时在复杂性、可读性、可能的速度方面过度杀伤。您的一般建议是什么?
// This is set once during initialization.
// The other 3 properties are derived from this one.
// Ends in .dat
public string DatFileName
{
get;
private set;
}
private Lazy<string> DatFileBase
{
get
{
// Removes .dat
return new Lazy<string>(() => Path.GetFileNameWithoutExtension(this.DatFileName));
}
}
public Lazy<string> MicrosoftFormatName
{
get
{
return new Lazy<string>(() => this.DatFileBase + "_m.fmt");
}
}
public Lazy<string> OracleFormatName
{
get
{
return new Lazy<string>(() => this.DatFileBase + "_o.fmt");
}
}