【问题标题】:Accessing 'self' object in closure在闭包中访问“自我”对象
【发布时间】:2009-07-07 09:34:25
【问题描述】:

我遇到以下问题:(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();
 }
}

我想在功能完成后删除该委托。有什么方法可以获取闭包本身的引用吗?

【问题讨论】:

    标签: c# closures anonymous-methods


    【解决方案1】:

    你可以用一个可以捕捉自身的低劣变量来做到这一点;-p

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

    null 的第一行需要满足明确的赋值;但您可以在 anon-method 中捕获此变量。

    【讨论】:

    • 我发现这个解决方案有点像黑客,但对我来说已经足够了。谢谢。 (清洁器将是不依赖于显式命名变量的解决方案:))
    • 如果你不命名变量,你将不得不命名方法,并处理所有的状态转移......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多