編集:
この種のことを検証する能力を持つ経験豊富なプログラマーが、この方法がメモリリークから安全であるという証拠を私に示してくれたら素晴らしいと思います。私はそれを私のコーディングの取り組みの多くに紹介してきましたが、それでも私の心には小さな疑問があります。残念ながら、私は十分ではありません/それを調査するためのツールを知りません。
オリジナル:
最近、ラムダ式を使用するとメモリリークが発生する可能性があることを学びました。
ProjectData Project;
void OnLaunchNewProject()
{
NewProjectUI newProjectUI = new NewProjectUI();
newProjectUI.OnCompleted += (o, e) =>
{
Project = newProjectUI.NewProject;
view.Content = string.Format("Project {0} was created and saved successfully.", Project.Name);
};
newProjectUI.OnCancelled += (o, e) => { view.Content = "Operation was cancelled.";};
view.Content = newProjectUI;
}
このブログでこの方法の悪影響を学びました。
ラムダ式でローカル変数を参照することの影響を完全には理解していません。これにより、問題を回避する能力が制限されます。
典型的なアプローチとラムダの使用の間で、理想的な妥協点は何ですか?ラムダについて私が気に入っているのは、クラスの本体(送信者/ルーティングされた引数)でのEventHandlerの引数の定義を、必要のないときにスキップすることです。