私は最近 .Net の Lazy クラスについて学びましたが、おそらくそれを使いすぎています。以下の例では、熱心な方法で評価できた可能性がありますが、何度も呼び出されると同じ計算が繰り返されることになります。この特定の例では、Lazy を使用するコストが利点を正当化しない可能性があります。ラムダと遅延呼び出しがどれほど高価であるかをまだ理解していないため、これについてはわかりません。複雑なロジックを小さな管理しやすいチャンクに分割できるため、チェーン化された Lazy プロパティを使用するのが好きです。また、何かを初期化するのに最適な場所を考える必要もなくなりました。知っておく必要があるのは、使用しない場合は初期化されず、使用を開始する前に一度だけ初期化されるということだけです。しかし、lazy とラムダを使い始めると、単純なクラスがより複雑になりました。これが正当化される時期と、これが複雑さ、読みやすさ、おそらく速度の点でやり過ぎである時期を客観的に判断することはできません。あなたの一般的な推奨事項は何ですか?
// 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");
}
}