2009-06-16 15 views
-2

Halten Sie für .NET mehrere Vererbung? Warum?Mehrere Vererbung in .NET

Ja, ich weiß, dass per Definition nicht, aber ich habe mehr als eine Person hatte argumentieren, dass, da Sie mehr als eine Schnittstelle erben kann, als es der Fall ist. Ich weiß, dass dies eine sehr subjektive Frage ist (daher das Etikett), aber ich hatte gehofft, dass ich mehr Ansichten dazu bekommen könnte.

Bearbeiten Ich frage nicht, wenn Sie denken, dass es mehrere Vererbung haben sollte, und ich sage auch nicht, dass Sie Schnittstelle erben. Was ich in meiner Frage versucht habe zu vermitteln, ist, dass ich gehört habe, dass einige Leute anders argumentieren, und ich wollte nur ein paar mehr Meinungen dazu bekommen. Ich habe erwartet, dass 99% der Antworten "Nein" sind, aber wie ich sagte, wollte ich etwas mehr Input.

Antwort

14

„Schnittstellen“ werden nicht vererbt, sondern sie angeben, was Sie richtig implementieren müssen, um die Schnittstellendefinition zu erfüllen. Die Vererbung impliziert eine mögliche Verhaltensänderung - die Elternklasse definiert etwas, die Kindklasse erweitert dies.

.NET ermöglicht es Ihnen, eine einzige Klasse in der Liste der Eltern haben (rechte Seite des Dickdarms), also die einfache Vererbung unterstützt, aber Sie sind frei, so viele Schnittstellen zu implementieren, wie Sie es wünschen.

Auch stimme ich mit dem „subjektiven“ Tag gibt es absolut nichts subjektiv über die Design-Entscheidung in .NET für einfache Vererbung zu ermöglichen.

+2

Es gibt einen Grund, warum die Schlüsselwörter von VB.NET "erweitert" und "implementiert" sind. +1. =) –

+2

Ehr. Erbt. Nicht erweitert. =) –

+1

Du hast mich geschlagen, aber verdammt, ich würde sowieso antworten! – Sean

4

Die Entwickler von .NET (oder zumindest C#) beschlossen, keine Mehrfachvererbung aufzunehmen. Wenn Sie sagen, dass es es enthält, müssten Sie die Definition der Mehrfachvererbung ändern, wobei Sie sagen können, dass alles mehrfache Vererbung einschließt.

1

Mehrere Schnittstellen ist keine Mehrfachvererbung. Schnittstellen werden nicht vererbt, sie sind implementiert.

Der Unterschied besteht darin, dass Schnittstellen nur eine öffentliche Gruppe von Methoden und Eigenschaften bereitstellen, die einen Vertrag zwischen dem aufrufenden Code und der implementierenden Klasse definieren. Die Vererbung erweitert mehr eine vorhandene Klasse oder ändert die Hintergrundimplementierung.