2009-07-07 73 views
1

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

而且我要删除该委托它的功能是完成时。有没有办法如何获得它本身的封闭引用?

回答

4

您可以捕获本身就是一个时尚的Cheaky变量做到这一点;-p

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

null第一行是需要满足一定的分配;但你可以在anon-method中捕获这个变量。

+0

我发现这种解决方案就像一种黑客,但对我来说足够了。谢谢。 (清洁将是不依赖于明确命名变量的解决方案:)) – nothrow 2009-07-07 09:42:56