.NET-Ereignisse - Blockieren von Abonnenten beim Abonnieren eines Ereignisses

8

Nehmen wir an, ich habe eine "Prozessor" -Schnittstelle, die ein Ereignis - OnProcess - anzeigt. In der Regel erledigen die Implementierer die Verarbeitung. So kann ich sicher auf diese Veranstaltung abonnieren und sicher sein, dass es gefeuert wird. Aber ein Prozessor verarbeitet keine Daten - daher möchte ich verhindern, dass Abonnenten darauf subscriben. Kann ich das machen? Mit anderen Worten, im folgenden Code möchte ich, dass die letzte Zeile eine Ausnahme auslöst:

%Vor%     
Moshe 17.02.2010, 17:40
quelle

2 Antworten

8
%Vor%

In diesem Fall verursacht der Parameter true unter Obsolete eine Kompilierungsausnahme. Also:

%Vor%     
Jimmy 17.02.2010, 17:44
quelle
0

Sie können es mit benutzerdefinierten Methoden add / remove implementieren, aber ich denke, das ist eine schlechte Praxis.

Sehen Sie, Sie haben eine Schnittstelle , einen Vertrag , der von verschiedenen Klassen implementiert wird.
OnProcess ist Teil dieses Vertrags und ist in keiner Hinsicht besonders Weg.

Normalerweise verwendet man Schnittstellen, wenn sie mit verschiedenen Klassen unter denselben Operationen arbeiten möchte . Schnittstellen können Sie wie folgt programmieren:

%Vor%

ohne konkreten Typ beim Kompilieren zu kennen.

Aber mit Ihrem Ansatz,

%Vor%

kann ohne erkennbaren Grund fehlschlagen, obwohl es wie absolut legitimer Code aussieht.
Stellen Sie immer sicher, dass falscher Code sieht falsch aus .

Sie haben möglicherweise einen der folgenden Designfehler begangen:

  • Setzen Sie OnProcess in IProcessor , wohingegen es nicht jeder Prozessorvertrag sein darf ;
  • Wurde EmptyProcessor implementiert IProcessor , wohingegen den Vertrag nicht erfüllen kann .
Dan Abramov 04.03.2011 21:23
quelle

Tags und Links