1

次の問題があります: (c#)

メソッドを持ついくつかのクラス (IRC ボット) があり、完了するにはいくつかのイベントの結果が必要です (非同期である可能性があります)。

はっきりしないかもしれません:

// simplified
class IRC 
{
 void DoSomeCommand()
 {
  OnListOfPeopleEvent += new Delegate(EventData e) { 
   if (e.IsForMe)
   {
    ReturnToUserSomeData();
    // THIS IS WHAT I NEED
    OnListOfPeopleEvent -= THIS DELEGATE;
   }
  }
  TakeListOfPeopleFromIrc();
 }
}

関数が完了したら、そのデリゲートを削除したいと思います。それ自体で閉鎖への参照を取得する方法はありますか?

4

1 に答える 1

4

これは、自分自身をキャプチャするチーキーな変数で行うことができます;-p

SomeDelegateType delegateInstance = null;
delegateInstance = delegate {
    ...
    obj.SomeEvent -= delegateInstance;
};
obj.SomeEvent += delegateInstance;

の最初の行nullは、明確な代入を満たすために必要です。ただし、anon メソッド内でこの変数をキャプチャすることは許可されています。

于 2009-07-07T09:36:52.423 に答える