2009-07-07 188 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