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% 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:
OnProcess
in IProcessor
, wohingegen es nicht jeder Prozessorvertrag sein darf ; EmptyProcessor
implementiert IProcessor
, wohingegen den Vertrag nicht erfüllen kann .