Ist Mehrfachvererbung möglich in VB .Net?
Ist Mehrfachvererbung möglich in VB .Net? Wenn ja, was ist die syntax?
InformationsquelleAutor Steve Duitsman | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist Mehrfachvererbung möglich in VB .Net? Wenn ja, was ist die syntax?
InformationsquelleAutor Steve Duitsman | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: Nein
Etwas längere Antwort: ja, wenn Sie das Erben von mehreren Schnittstellen und einem einzigen Basisklasse. Da dies in der Regel der Grund für MI (möchten Sie mehrere interfaces implementieren), ist es normalerweise genug. Aber in jenen seltenen Fällen, in denen "echte" MI ist nützlich, .NET Sie daran hindert, es zu tun.
Edwards: wie ist es nicht? Vererbung definiert, "ist ein" - Beziehung, und Schnittstellen sind ein Weg, um zu definieren, was ein Objekt 'ist'. Wenn ich Erben ISerializable, ich sage "ich bin ein ISerializable", und behandeln mich wie eine ISerializable funktioniert wie erwartet.
Weiter zu @Harper 'Shelby' s Kommentar, eine freiwillige Anwendung dieser Art der Beschränkung ist in der Regel angesehen als ein best-practice in C++ (anstelle von Schnittstellen, die Sie hätten rein abstrakte Basisklassen).
Vererbung, wenn die Erben Sie den vorgegebenen code als auch. und es liefert die gleichen Ergebnisse. Implementieren von Schnittstellen bedeutet, dass Sie immer noch den code zu schreiben in den vordefinierten Methoden. Während die Schnittstellen immer noch die gleichen Signaturen, die Sie enthalten können, völlig anderen code und produzieren unterschiedliche Ergebnisse. Also Nein, es ist nicht Vererbung. Sorry.
Ich glaube, du bist künstlich beschränken Ihre definition von Vererbung. Ich habe Muster, wie Template-Methode, die auf mehr als einer Gelegenheit, wo etwas code wird wiederverwendet, aber die anderen bits sind nicht nur nicht wiederverwendet, aber nicht in der Basisklasse definiert absichtlich. Beide Unterklassen definitiv geerbt von der Basis, aber hatte sehr unterschiedliche Implementierungen und Ergebnisse.
InformationsquelleAutor Harper Shelby
Ist es möglich, in einer eingeschränkten Weise, in VB.Net in der gleichen Weise, dass es in C#: über Schnittstellen. Da eine Schnittstelle funktioniert im wesentlichen eine rein abstrakte Basisklasse, Sie kann Erben aus, wie viele von denen, wie Sie benötigen und von einem echt Klasse.
InformationsquelleAutor Joel Coehoorn
Wahrscheinlich, was Sie tun möchten, ist wirklich Komposition oder aggregation ( siehe hier für design-Muster). Vielleicht sind Sie definieren ein Verhalten. Sie können immer eine Schnittstelle implementieren, SomeInterface in der base-Klasse, ein Mitglied der Typ SomeInterface (die können es alle Klasse, die SomeInterface und kann daher den code nicht die Umsetzung), in der Mitglieder-Konstruktor übergeben Sie einen Verweis auf die Basisklasse, die es besitzt, wenn es notwendig ist (wenn Sie so tun, versuchen Sie, fügen Sie eine weitere Schnittstelle zu definieren, die callbacks der Basis-Klasse implementieren, und die Unterklasse werden die member-Variablen-Typ). Verwendung Aufrufe der member-Klasse zu implementieren SomeInterface. Diese Art der Umsetzung des Codes in einer anderen Klasse, die macht es einfach zu halten, aber Sie sind nicht machen Mehrfachvererbung.
Die Idee hinter der Komposition ist, dass ein Motor ist kein Auto, sondern ein Auto hat einen Motor. Das Auto braucht einen Motor, muss aber nicht, zu wissen, wie eine ganze Motor-Einheit funktioniert, nur, wie die Schnittstelle mit der es. Also der Motor sollte nicht Erben aus dem Auto. Aber mit dem Auto implementieren, der Motor ist dumm. So bekommt das Auto einen Motor, der als Mitglied des das ganze Auto, sondern als ein Objekt. Das Auto hat einen Motor als Teil seiner Komposition.
Es klingt wie das, was Sie tun, ist eher ein Verhalten, wie eine Ente-Objekt, das hat ein Quacksalber Verhalten, aber Gummi-Enten sind Enten aber nicht quaken, sondern Quietschen. Damit unterscheiden Sie sich von mallard Objekte, aber beide haben viele andere Ente Merkmale gemeinsam haben. So dass Sie wollen, um ein quack-Schnittstelle, die jeweils anders implementiert. Aber viele Enten wird quack für diese Schnittstelle, so dass Sie nicht wollen, um zu schreiben, quack für jeden. Das ist, wo Sie die Verwendung der Zusammensetzung zur Umsetzung der quack-Schnittstelle Verhalten.
InformationsquelleAutor VoteCoffee
Soweit ich weiß VB.net Mehrfachvererbung nicht unterstützt, aber Sie können erreichen, eine Art Mehrfachvererbung durch die Arbeit mit Schnittstellen (mit "Implements" statt "Erbt"):
Dass funktioniert gut für Klassen, aber ich möchte ein interface erbt, einige Basis-Schnittstellen. So etwas wie:
Aber dem Schlüsselwort "Implements" ist nicht erlaubt, Schnittstellen (was Sinn macht, natürlich). Ich habe versucht, eine Art abstrakte Klasse, die kenne ich von Java:
Aber jetzt brauche ich für die Umsetzung der festgelegten Methoden aus BaseInterface1 und BaseInterface2 innerhalb der InterfaceName-Klasse. Aber als InterfaceName sollte eine Schnittstelle zu, ich will nicht zu haben, um die Implementierung dieser Methoden innerhalb dieser Klasse.
In C# können Sie das ganz einfach:
InformationsquelleAutor user1954025