在闭包中访问'self'对象

时间:2009-07-07 09:34:25

标签: c# closures anonymous-methods

我遇到了以下问题:(c#)

有一些类(IRC bot),它有方法,需要完成某些事件的结果(通过它可能是异步的)。

也许不清楚:

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

我希望在功能完成时删除该委托。有没有办法如何在它自身中获得对闭包的引用?

1 个答案:

答案 0 :(得分:4)

您可以使用捕获自身的cheaky变量来执行此操作;-p

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

需要null的第一行才能满足明确的任务;但是你可以在anon-method中捕获这个变量。