2009-07-07 19 views
1

Ich habe folgendes Problem habe: (C#)Zugriff auf ‚Selbst‘ Objekt in Schließung

Es gibt einige Klasse (IRC-Bot), wobei das Verfahren hat, das Ergebnis eines Ereignisses für eine vollständige muss (durch sie sein könnte asynchron).

Vielleicht nicht klar:

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

Und ich möchte, dass die Delegierten löschen, wenn es die Funktion abgeschlossen ist. Gibt es einen Weg, den Verweis auf die Schließung selbst zu erhalten?

Antwort

4

Sie können dies tun mit einer cheaky Variable, die sich ;-P

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

Die erste Zeile fängt erforderlich eindeutige Zuordnung zu befriedigen; aber Sie dürfen diese Variable innerhalb der Anon-Methode erfassen.

+0

Ich fand diese Lösung wie eine Art Hack, aber ausreichend für mich. Vielen Dank. (Cleaner wäre eine Lösung, die nicht von explizit benannter Variable abhängig ist :)) – nothrow

+0

Wenn Sie die Variable nicht benennen, müssen Sie stattdessen die Methode benennen und alle Statusübertragung verarbeiten ... –

Verwandte Themen