2010-07-14 12 views
6

Ich arbeite mit ein wenig Code, der so strukturiert ist:Wie richte ich Delegaten zwischen meinen Klassen ein?

Form A hat Benutzersteuerelemente B und G in ihm. Benutzersteuerelement B enthält Benutzersteuerelement D, und Benutzersteuerelement D hat eine "Aktualisierungsmethode". Das Benutzersteuerelement G hat die Benutzersteuerung F und das Benutzersteuerelement F muss die "Aktualisierungs" -Methode in D aufrufen.

1) Kurz vor der Umstrukturierung des Codes (es ist Legacy-Code, daher ist es als Option vom Tisch) Sind die Delegierten der beste Weg, dieses Problem zu lösen? Wenn nicht, haben Sie einen anderen Vorschlag?

2) Ich habe keine Erfahrung mit Delegate-Funktionen - gibt es eine gute Grundierung oder ein Beispiel, das ich verwenden könnte, um meinen Code anzupassen, um die gewünschte Funktionalität zu erreichen?

Antwort

4

Zuerst sollte F nichts über D und seine Refresh-Funktion wissen. Fügen Sie ein Ereignis zu F hinzu, das bei Bedarf ausgelöst wird. Wenn Formular A über F Bescheid weiß, schließen Sie dieses Ereignis an A. Falls nicht, machen Sie ein ähnliches Ereignis in G und abonnieren Sie es in A. Rufen Sie in einem Ereignishandler Refresh direkt auf oder rufen Sie die B-Methode auf, die D.refresh aufruft.

Es sieht aus wie meine Antwort noch weniger lesbar als Ihre Frage ist :) Es sollte wie folgt aussehen:

F hebt Ereignis -> G Griffe F Veranstaltung und Ereignis auslöst -> A Griffe G Ereignis und B-Methode aufruft -> B-Methode ruft D.refresh

+0

@Raven Sie sind mit Delegierten auf dem richtigen Weg. Ereignisse werden unter Verwendung von Delegaten deklariert, so dass die Delegierten zuerst gelernt werden müssen. –

0

Für Delegierten sehen: http://www.akadia.com/services/dotnet_delegates_and_events.html

Für Veranstaltungen Sie müssen sicherstellen, dass Sachen passieren in der richtigen Reihenfolge durch. Im aktuellen Szenario, ich rate, dass ein guter Weg wäre, ein Ereignis von G zu offenbaren, die ausgelöst werden sollte, wenn sich etwas in F ändert. Und wir werden einen Handler haben, der dieses Ereignis in B abonniert hat, was schließlich eine Aktualisierung aufrufen wird. Es werden noch ein paar weitere Ereignisse und Delegaten benötigt, um die Anrufe von Eltern zu Kind und umgekehrt weiterzuleiten. Behalte das Konzept eines mechanischen Geräts im Hinterkopf: Ein Teil, der die Bewegung STARKET, ist derjenige, der andere auslöst (Ereignis auslöst). Wenn andere sich bewegen, lösen sie andere verwandte Teile aus ... und irgendwann bewegt sich etwas weit weg. Hoffe es hilft.

Verwandte Themen