Freigeben über


Grundlagen der Vererbung

Aktualisiert: November 2007

Mit der Inherits–Anweisung wird eine neue Klasse, eine so genannte abgeleitete Klasse, deklariert, die auf einer vorhandenen Klasse, der Basisklasse, basiert. Abgeleitete Klassen erben die in der Basisklasse definierten Eigenschaften, Methoden, Ereignisse, Felder und Konstanten und können diese erweitern. Im folgenden Abschnitt werden einige Vererbungsregeln sowie die Modifizierer beschrieben, die Sie zum Ändern der Vererbungs- oder Erbungsart für Klassen verwenden können.

  • Standardmäßig können alle Klassen vererbt werden, es sei denn, sie sind durch das Schlüsselwort NotInheritable gekennzeichnet. Klassen können von anderen Klassen in Ihrem Projekt oder von Klassen in anderen Assemblys erben, auf die das Projekt verweist.

  • Im Gegensatz zu Sprachen, für die eine Mehrfachvererbung zulässig ist, sind in Visual Basic nur einfache Vererbungen in Klassen möglich, d. h. abgeleitete Klassen können nur eine Basisklasse haben. Obwohl die Mehrfachvererbung in Klassen nicht zulässig ist, können Klassen mehrfache Schnittstellen implementieren, was die gleiche Wirkung hat.

  • Wenn Sie vermeiden möchten, dass eingeschränkte Elemente in einer Basisklasse verfügbar werden, muss der Zugriffstyp einer abgeleiteten Klasse ebenso eingeschränkt oder eingeschränkter als die Basisklasse sein. Eine Public-Klasse kann z. B. keine Friend-Klasse oder keine Private-Klasse vererben, und eine Friend-Klasse kann keine Private-Klasse vererben.

Vererbungsmodifizierer

Visual Basic führt folgende Anweisungen und Modifizierer auf Klassenebene zur Unterstützung der Vererbung ein:

  • Inherits-Anweisung: Gibt die Basisklasse an.

  • NotInheritable-Modifizierer: Verhindert, dass Programmierer die Klasse als Basisklasse verwenden.

  • MustInherit-Modifizierer: Gibt an, dass die Klasse nur als Basisklasse verwendet werden soll. Instanzen der MustInherit-Klassen können nicht direkt, sondern nur als Basisklasseninstanzen einer abgeleiteten Klasse erstellt werden. (Andere Programmiersprachen wie z. B. C++ und C# verwenden den Begriff abstrakte Klasse, um eine solche Klasse zu beschreiben).

Überschreiben von Eigenschaften und Methoden in abgeleiteten Klassen

Standardmäßig erbt eine abgeleitete Klasse Eigenschaften und Methoden von ihrer Basisklasse. Wenn sich eine geerbte Eigenschaft oder Methode in der abgeleiteten Klasse anders verhalten soll, kann sie überschrieben werden, d. h. Sie können eine neue Implementierung der Methode in der abgeleiteten Klasse definieren. Mit folgenden Modifizierern steuern Sie das Überschreiben von Eigenschaften und Methoden:

  • Overridable: Ermöglicht, dass eine Eigenschaft oder Methode in einer Klasse in einer abgeleiteten Klasse überschrieben wird.

  • Overrides: Überschreibt eine Overridable-Eigenschaft oder Overridable-Methode, die in der Basisklasse definiert ist.

  • NotOverridable- verhindert, dass eine Eigenschaft oder eine Methode in einer erbenden Klasse überschrieben wird. Standardmäßig sind Public-Methoden NotOverridable.

  • MustOverride: Eine abgeleitete Klasse muss die Eigenschaft oder Methode überschreiben. Wenn das MustOverride-Schlüsselwort verwendet wird, besteht die Methodendefinition nur aus den Anweisungen Sub, Function oder Property. Andere Anweisungen sind nicht zulässig, und insbesondere gibt es keine End Sub-Anweisung oder End Function-Anweisung. MustOverride-Methoden müssen in MustInherit-Klassen deklariert werden.

Weitere Informationen zum Überschreiben von Methoden finden Sie unter Überschreiben von Eigenschaften und Methoden.

Das MyBase-Schlüsselwort

Mit dem Schlüsselwort MyBase können Sie beim Überschreiben von Methoden in einer abgeleiteten Klasse Methoden in einer Basisklasse aufrufen. Angenommen, Sie entwerfen z. B. eine abgeleitete Klasse, die eine aus einer Basisklasse geerbten Methode überschreibt. Die überschriebene Methode kann die Methode in der Basisklasse aufrufen und den Rückgabewert wie im folgenden Codefragment ändern:

Class DerivedClass
    Inherits BaseClass
    Public Overrides Function CalculateShipping( _
        ByVal Dist As Double, _
        ByVal Rate As Double) _
        As Double
        ' Call the method in the base class and modify the return value.
        Return MyBase.CalculateShipping(Dist, Rate) * 2
    End Function
End Class

Die folgende Liste beschreibt die Einschränkungen bei der Verwendung von MyBase:

  • MyBase bezieht sich auf die unmittelbare Basisklasse und deren geerbte Member. Damit kann nicht auf Private-Member in der Klasse zugegriffen werden.

  • MyBase ist ein Schlüsselwort, kein wirkliches Objekt. Es ist nicht möglich, MyBase einer Variablen zuzuweisen, es Prozeduren zu übergeben oder es in einem Is-Vergleich zu verwenden.

  • Die Methode, von der MyBase qualifiziert wird, muss nicht in der unmittelbaren Basisklasse festgelegt sein, sondern kann auch in einer indirekt geerbten Basisklasse definiert werden. Damit ein von MyBase gekennzeichneter Verweis ordnungsgemäß kompiliert wird, muss in einer Basisklasse eine Methode enthalten sein, die dem Namen und den Typen der Parameter entspricht, die im Aufruf angezeigt werden.

  • Mit MyBase können Sie die MustOverride-Basisklassenmethoden nicht aufrufen.

  • MyBase kann nicht verwendet werden, um sich selbst zu qualifizieren. Daher ist der folgende Code nicht gültig:

    MyBase.MyBase.BtnOK_Click()

  • MyBase kann nicht in Modulen verwendet werden.

  • Mit MyBase können Sie nicht auf als Friend gekennzeichnete Basisklassenmember zugreifen, wenn sich die Basisklasse in einer anderen Assembly befindet.

Das MyClass-Schlüsselwort

Mit dem Schlüsselwort MyClass können Sie eine in Ihrer Klasse implementierte Overridable-Methode aufrufen und sicherstellen, dass die Implementierung der Methode in dieser Klasse aufgerufen wird und es sich nicht um eine überschriebene Methode in einer abgeleiteten Klasse handelt.

  • MyClass ist ein Schlüsselwort, kein wirkliches Objekt. Es ist nicht möglich, MyClass einer Variablen zuzuweisen, es Prozeduren zu übergeben oder es in einem Is-Vergleich zu verwenden.

  • MyClass bezieht sich auf die enthaltene Klasse und deren geerbte Member.

  • MyClass kann als Qualifizierer für Shared-Member verwendet werden.

  • MyClass kann nicht in Standardmodulen verwendet werden.

  • Mit MyClass kann eine Methode qualifiziert werden, die in einer Basisklasse definiert ist und die keine Implementierung der in dieser Klasse enthaltenen Methode aufweist. Ein solcher Verweis hat dieselbe Bedeutung wie MyBase.Methode.

Siehe auch

Aufgaben

Gewusst wie: Erstellen abgeleiteter Klassen

Konzepte

Überschreiben von Eigenschaften und Methoden

Referenz

Inherits-Anweisung

Weitere Ressourcen

Änderungen in der Programmiersprache für Visual Basic 6.0-Benutzer