2016-03-29 15 views
-3

Ich stehe im Interview regelmäßig vor dieser Frage. Aber ich bekomme es nirgends Antwort. Bitte helfen Sie mir.Warum brauchen wir eine Erweiterungsmethode, wenn die Vererbung bereits existiert?

+3

Was ist mit versiegelten Klassen? –

+0

Erweiterungsmethoden sind syntaktische Zucker, die der Sprache hinzugefügt wurden, damit Linq-Aufrufe so aussehen, als wären sie in alle Klassen eingebaut, die 'IEnumerable <> 'usw. implementieren. Das heißt, Sie können eine Methode" hinzufügen " zu einer Klasse, für die Sie nicht den Quellcode haben oder die versiegelt ist. –

Antwort

0

Vererbung und Erweiterung Methoden sind völlig orthogonal. Es ist nur eine einfache Möglichkeit, eine Funktion in C# mit der bekannten Syntax . zu schreiben. Sie sehen nur ähnlich aus, wenn Sie Vererbung für die Wiederverwendung von Code verwenden, was tendenziell verpönt ist (aber stellen Sie sicher, dass Sie verstehen, warum - "beste" Praktiken sind kontextsensitiv :)).

In jedem Fall würde ich erwarten, dass die Frage Sie sprechen. Konzentrieren Sie sich nicht zu sehr darauf, was die "richtige" Antwort ist - beschreiben Sie einfach, welche Vererbung für Sie verwendet wird und welche Erweiterungsmethoden verwendet werden und welche Vor- und Nachteile jede davon hat. Lassen Sie den Dialog laufen.

Für mich zum Beispiel, Erweiterungsmethoden sind alle über gemeinsame Funktionen gegen eine Schnittstelle. Das heißt, die Funktionen fügen Funktionalität über eine Schnittstelle (oder Klasse) hinzu, während sie nur ihre öffentliche Schnittstelle verwenden. Dies macht die "Größe" der Schnittstelle für die Funktion viel kleiner, was es wiederum viel einfacher macht, darüber nachzudenken.

Verschiedene Menschen verwenden die Extension-Methoden anders, genauso wie verschiedene Leute die Vererbung anders benutzen. Ich finde jedoch, dass, wenn Sie von der Vererbung zur Komposition wechseln, Erweiterungsmethoden immer nützlicher werden (und wirklich, natürlich). Vererbung ist eine sehr spezifische Technik, die für fast alles mit wenig Grund verwendet wurde, aber das ist ein großes Thema auf Programmers.SE schon sowieso, genau wie die Komposition vs Vererbungs Debatte :))

Verwandte Themen