Class-Anweisung (Visual Basic)

Deklariert den Namen einer Klasse und führt die Definition der Variablen, Eigenschaften, Ereignisse und Prozeduren ein, die die Klasse umfasst.

Syntax

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _  
Class name [ ( Of typelist ) ]  
    [ Inherits classname ]  
    [ Implements interfacenames ]  
    [ statements ]  
End Class  

Bestandteile

Begriff Definition
attributelist Dies ist optional. Siehe Attributliste.
accessmodifier Optional. Dabei kann es sich um eine der folgenden Methoden handeln:

- Public
- Protected
- Friend
- Privat
- Protected Friend
- Private Protected

Siehe Access levels in Visual Basic.
Shadows Optional. Siehe Shadows.
MustInherit Optional. Siehe MustInherit.
NotInheritable Optional. Siehe NotInheritable.
Partial Optional. Gibt eine partielle Definition der Klasse an. Siehe Teilweise.
name Erforderlich. Name dieser Klasse. Siehe Declared Element Names.
Of Optional. Gibt an, dass es sich um eine generische Klasse handelt.
typelist Erforderlich, wenn Sie das Of-Schlüsselwort verwenden. Liste der Typparameter für diese Klasse. Siehe Typliste.
Inherits Optional. Gibt an, dass diese Klasse die Member einer anderen Klasse erbt. Siehe Inherits-Anweisung.
classname Erforderlich, wenn Sie die Inherits-Anweisung verwenden. Der Name der Klasse oder Schnittstelle, von der diese Klasse abgeleitet wird.
Implements Optional. Gibt an, dass diese Klasse die Member einer oder mehrerer Schnittstellen implementiert. Siehe Implements-Anweisung.
interfacenames Erforderlich, wenn Sie die Implements-Anweisung verwenden. Die Namen der Schnittstellen, die diese Klasse implementiert.
statements Optional. Anweisungen, die die Member dieser Klasse definieren.
End Class Erforderlich. Beendet die Class-Definition.

Bemerkungen

Eine Class-Anweisung definiert einen neuen Datentyp. Eine Klasse ist ein grundlegender Baustein der objektorientierten Programmierung (OOP). Weitere Informationen finden Sie unter Objekte und Klassen.

Class kann nur auf Namespace- oder Modulebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für eine Klasse eine Quelldatei, ein Namespace, eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle sein muss und keine Prozedur oder ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Jede Instance einer Klasse verfügt über eine Lebensdauer unabhängig von allen anderen Instanzen. Diese Lebensdauer beginnt, wenn sie von einer New Operator-Klausel oder von einer Funktion wie CreateObject erstellt wird. Sie endet, wenn alle Variablen, die auf die Instance verweisen, auf Nothing oder auf Instanzen anderer Klassen festgelegt wurden.

Klassen werden standardmäßig auf denFriend-Zugriff festgelegt. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Regeln

  • Schachtelung. Sie können eine Klasse innerhalb einer anderen definieren. Die äußere Klasse wird als mit Klassen bezeichnet, und die innere Klasse wird als geschachtelte Klasse bezeichnet.

  • Vererbung. Wenn die Klasse die Inherits-Anweisungverwendet, können Sie nur eine Basisklasse oder Schnittstelle angeben. Eine Klasse kann nicht von mehreren Elementen erben.

    Eine Klasse kann nicht von einer anderen Klasse mit einer restriktiveren Zugriffsebene erben. Beispielsweise kann eine Public-Klasse nicht von einer Friend-Klasse erben.

    Eine Klasse kann nicht von einer in ihr geschachtelten Klasse erben.

  • Implementierung. Wenn die Klasse die Implements Anweisung verwendet, müssen Sie jedes Element implementieren, das von jeder Schnittstelle definiert wird, die Sie in interfacenames angeben. Eine Ausnahme ist die Erneute Implementierung eines Basisklassenmembers. Weitere Informationen finden Sie unter „Reimplementation“ in Implements.

  • Standardeigenschaft. Eine Klasse kann höchstens eine Eigenschaft als Standardeigenschaft angeben. Weitere Informationen finden Sie unter Standard.

Verhalten

  • Zugriffsebene. Innerhalb einer Klasse können Sie jedes Mitglied mit einer eigenen Zugriffsebene deklarieren. Klassenmember werden standardmäßig den Zugriff auf öffentliche , mit Ausnahme von Variablen und Konstanten, die standardmäßig den Zugriff auf private haben. Wenn eine Klasse mehr eingeschränkten Zugriff hat als eines ihrer Member, hat die Klassenzugriffsebene Vorrang.

  • Umfang. Eine Klasse befindet sich im Gesamten des zugehörigen Namespaces, der Klasse, der Struktur oder des Moduls.

    Der Bereich jedes Klassenelements ist die gesamte Klasse.

    Lifetime (Lebensdauer). Visual Basic unterstützt keine statischen Klassen. Das funktionale Äquivalent einer statischen Klasse wird von einem Modul bereitgestellt. Weitere Informationen finden Sie unter Module-Anweisung.

    Klassenmember haben Lebensdauern, je nachdem, wie und wo sie deklariert werden. Weitere Informationen finden Sie unter Lebensdauer in Visual Basic.

  • Qualifikation. Code außerhalb einer Klasse muss den Namen eines Members mit dem Namen dieser Klasse qualifizieren.

    Wenn Code in einer geschachtelten Klasse einen nicht qualifizierten Verweis auf ein Programmierelement macht, sucht Visual Basic zuerst in der geschachtelten Klasse nach dem Element, dann in seiner enthaltenden Klasse usw. auf das äußerste enthaltende Element.

Klassen und Module

Diese Elemente haben viele Ähnlichkeiten, aber es gibt auch einige wichtige Unterschiede.

  • Terminologie. Frühere Versionen von Visual Basic erkennen zwei Typen von Modulen: Klassenmodule (CLS-Dateien) und Standardmodule (BAS-Dateien). In der aktuellen Version werden diese als Klassen bzw. Module bezeichnet.

  • Freigegebene Member. Sie können steuern, ob ein Member einer Klasse ein freigegebenes oder ein Instanzmember ist.

  • Objektorientierung. Klassen sind objektorientiert, Module hingegen nicht. Sie können eine oder mehrere Instanzen einer Klasse erstellen. Weitere Informationen finden Sie unter Objekte und Klassen.

Beispiel

Im folgenden Beispiel wird eine Class-Anweisung verwendet, um eine Klasse und mehrere Member zu definieren.

Class BankAccount
    Shared interestRate As Decimal
    Private accountBalance As Decimal
    Public holdOnAccount As Boolean = False

    Public ReadOnly Property Balance() As Decimal
        Get
            Return accountBalance
        End Get
    End Property

    Public Sub PostInterest()
        accountBalance = accountBalance * (1 + interestRate)
    End Sub

    Public Sub PostDeposit(ByVal amountIn As Decimal)
        accountBalance = accountBalance + amountIn
    End Sub

    Public Sub PostWithdrawal(ByVal amountOut As Decimal)
        accountBalance = accountBalance - amountOut
    End Sub
End Class

Siehe auch