2009-04-26 8 views

Antwort

3

Ohne mehr Kontext, würde ich auch Interfaces sagen. Berücksichtigen Sie, dass Sie eine Funktion oder einen Delegaten als Schnittstelle mit einer einzigen Methode darstellen können und dass abstrakte Klassen nur Schnittstellen zu möglicherweise bereits implementierten Methoden sind.

Das sagte, es hängt wirklich davon ab, was Sie erreichen möchten. Schnittstellen eignen sich für Fälle, in denen Sie viele Objekte mit einer gemeinsamen Schnittstelle, aber potenziell unterschiedlichen Implementierungen haben. Wenn Sie zum Beispiel ein sehr einfaches Callback-System für Plugins entwickeln (z. B .: Lassen Sie das Plugin bestimmte Ereignisse in der Host-Anwendung haken), sind die Delegierten wahrscheinlich einfacher und für Ihre Bedürfnisse ausreichend.

Denken Sie auch daran, dass Sie, wenn Sie mit Schnittstellen arbeiten, wahrscheinlich eine Möglichkeit für den Host benötigen, Instanzen zu instanziieren. Der einfachste Weg, dies zu tun, besteht darin, einen Delegaten mit dem Host unter einem eindeutigen Namen zu registrieren.

Abstrakte Klassen sind nur nützlich, wenn Sie Schnittstellen verwenden und eine Standardimplementierung einiger Dinge bereitstellen möchten. Eine bessere Lösung in diesem Fall ist stattdessen, eine tatsächliche Schnittstelle zu haben und die Standardimplementierung als Mixin bereitzustellen.

+0

Ich stimme zu. Ich werde Schnittstellen gehen. – zaphnat

0

Schnittstellen haben meine Stimme. Auf diese Weise kann jeder Entwickler, solange Sie die Schnittstelle definieren, relativ einfach etwas Kompatibles schreiben, ohne dass Sie zu viel Code an diese verteilen müssen.