c# - 在闭包中访问 'self' 对象

标签 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();
 }
}

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

最佳答案

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

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

要求第一行null满足明确赋值;但您可以在匿名方法中捕获此变量。

关于c# - 在闭包中访问 'self' 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1091290/

相关文章:

c# - StructureMap 重置单例实例

c# - 确定在 .NET 中单击了哪个鼠标(多个鼠标设备)

testing - 如何处理将可变借用的结构传递给函数闭包?

rust - 如何将引用参数传递给盒装闭包?

delphi - 嵌套匿名方法发生内存泄漏

c# - 我可以将 foreach 和 LINQ 查询合并为一个吗?

c# - WPF 数据网格 : IsVirtualizingWhenGrouping ="True" not working

javascript - 为什么调用匿名函数表达式有两种不同的语法?

c# - 匿名方法的丑陋之处和优点-C#

c# - 使用委托(delegate)时,有没有办法获取对象响应?