Objektorientierte Programmierung (Visual Basic)
Visual Basic bietet vollständige Unterstützung für die objektorientierte Programmierung, einschließlich Kapselung, Vererbung und Polymorphie.
Kapselung bedeutet, dass eine Gruppe verwandter Eigenschaften, Methoden sowie anderer Member als eine Einheit bzw. ein Objekt behandelt wird.
Vererbung beschreibt die Fähigkeit, neue Klassen basierend auf einer vorhandenen Klasse zu erstellen.
Polymorphismus bedeutet, dass Sie mehrere Klassen untereinander austauschen können, obwohl jede Klasse dieselben Eigenschaften oder Methoden auf unterschiedliche Art und Weise implementiert.
In diesem Abschnitt werden die folgenden Konzepte beschrieben:
Klassen und Objekte
Die Begriffe Klasse und Objekt werden manchmal synonym verwendet; genau genommen beschreiben Klassen jedoch den Typ von Objekten, während Objekte verwendbare Instanzen von Klassen sind. Das Erstellen eines Objekts wird daher als Instanziierung bezeichnet. Um auf den Vergleich mit Bauplänen zurückzukommen: Eine Klasse ist ein Bauplan, und ein Objekt ist ein anhand dieses Bauplans errichtetes Gebäude.
So definieren Sie eine Klasse
Class SampleClass
End Class
Visual Basic stellt ebenfalls vereinfachte Versionen von Klassen bereit, die als Strukturen bezeichnet werden. Strukturen sind hilfreich, wenn Sie ein großes Objektarray erstellen müssen und nicht zu viel Arbeitsspeicher belegen wollen.
So definieren Sie eine Struktur
Structure SampleStructure
End Structure
Weitere Informationen findest du unter:
Klassenmember
Jede Klasse kann über andere Klassenmember verfügen. Diese enthalten Eigenschaften, die Klassendaten beschreiben, Methoden, die Klassenverhalten definieren sowie Ereignisse, die die Kommunikation zwischen verschiedenen Klassen und Objekten bereitstellen.
Eigenschaften und Felder
Felder und Eigenschaften stellen die in einem Objekt enthaltenen Informationen dar. Felder sind wie Variablen, sie können direkt gelesen oder festgelegt werden.
So definieren Sie ein Feld
Class SampleClass
Public SampleField As String
End Class
Eigenschaften verfügen über Get- und Set-Prozeduren, die eine bessere Kontrolle über das Festlegen oder Abrufen von Werten ermöglichen.
Visual Basic ermöglicht es Ihnen, ein privates Feld zum Speichern des Eigenschaftswerts zu erstellen oder so genannte automatisch implementierte Eigenschaften zu verwenden, die dieses Feld automatisch hinter den Kulissen erstellen und die grundlegende Logik für die Eigenschaftsprozeduren bereitstellen.
So definieren Sie eine automatisch implementierte Eigenschaft:
Class SampleClass
Public Property SampleProperty as String
End Class
Verwenden Sie den folgenden Code, wenn Sie zusätzliche Lese- und Schreibvorgänge für den Eigenschaftswert ausführen müssen, um ein Feld zum Speichern des Eigenschaftswerts zu definieren und die grundlegende Logik zum Speichern und Abrufen bereitzustellen:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
m_Sample = Value
End Set
End Property
End Class
Die meisten Eigenschaften verfügen über Methoden oder Prozeduren zum Festlegen und Abrufen des Eigenschaftswerts. Sie können jedoch schreib- oder lesegeschützte Eigenschaften erstellen, um zu verhindern, dass die Eigenschaften gelesen oder geändert werden. In Visual Basic können Sie das ReadOnly
-Schlüsselwort und das WriteOnly
-Schlüsselwort verwenden. Automatisch implementierte Eigenschaften können jedoch nicht schreibgeschützt oder schreibgeschützt sein.
Weitere Informationen finden Sie unter:
Methoden
Eine Methode ist eine Aktion, die von einem Objekt ausgeführt werden kann.
Hinweis
In Visual Basic gibt es zwei Möglichkeiten, eine Methode zu erstellen: Wenn die Methode keinen Wert zurückgibt, wird die Sub
-Anweisung verwendet; andernfalls wird die Function
-Anweisung verwendet.
So definieren Sie eine Methode einer Klasse:
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
End Function
End Class
Eine Klasse kann über mehrere Implementierungen oder Überladungen der gleichen Methode verfügen, die sich in der Anzahl der Parameter oder Parametertypen unterscheiden.
So überladen Sie eine Methode
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
In den meisten Fällen deklarieren Sie eine Methode innerhalb einer Klassendefinition. Visual Basic unterstützt jedoch auch Erweiterungsmethoden, mit denen Sie einer vorhandenen Klasse außerhalb der eigentlichen Klassendefinition Methoden hinzuzufügen können.
Weitere Informationen findest du unter:
Konstruktoren
Konstruktoren sind Klassenmethoden, die automatisch ausgeführt werden, wenn ein Objekt eines bestimmten Typs erstellt wird. Konstruktoren initialisieren normalerweise die Datenmember des neuen Objekts. Konstruktoren können nur einmal während der Erstellung der Klasse ausgeführt werden. Weiterhin wird der Code im Konstruktor immer vor jedem anderen Code in einer Klasse ausgeführt. Sie können jedoch mehrere Konstruktorüberladungen auf die gleiche Weise wie für jede andere Methode erstellen.
So definieren Sie einen Konstruktor für eine Klasse:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
Weitere Informationen finden Sie unter Objektlebensdauer: Erstellen und Zerstören von Objekten.
Destruktoren
Destruktoren werden zur Zerstörung von Klasseninstanzen verwendet. In .NET Framework verwaltet die Garbage Collection die Speicherbelegung automatisch und gibt Arbeitsspeicher für die verwalteten Objekte in der Anwendung frei. Möglicherweise sind jedoch noch Destruktoren erforderlich, um alle nicht verwalteten Ressourcen zu bereinigen, die von der Anwendung erstellt werden. Es kann nur einen Destruktor für eine Klasse geben.
Weitere Informationen zu Destruktoren und der Garbage Collection in .NET Framework finden Sie unter Garbage Collection.
Ereignisse
Ereignisse aktivieren eine Klasse oder ein Objekt, um Informationen über Aktionen von Interesse an andere Klassen oder Objekte zu übermitteln. Die Klasse, die das Ereignis sendet (oder auslöst), wird als Herausgeber bezeichnet, und die Klassen, die das Ereignis empfangen (oder verarbeiten), werden als Abonnenten bezeichnet. Weitere Informationen zu Ereignissen sowie zu ihrer Auslösung und Behandlung finden Sie unter Ereignisse.
Verwenden Sie zum Deklarieren von Ereignissen die Event-Anweisung.
Verwenden Sie zum Auslösen von Ereignissen die RaiseEvent-Anweisung.
Verwenden Sie die WithEvents-Anweisung und die Handles-Klausel, um Ereignishandler per Deklaration festzulegen.
Um den mit einem Ereignis verbundenen Ereignishandler dynamisch hinzufügen, entfernen und ändern zu können, verwenden Sie die AddHandler-Anweisung und die RemoveHandler-Anweisung zusammen mit dem AddressOf-Operator.
Geschachtelte Klassen
Eine Klasse, die in einer anderen Klasse definiert wird, wird als geschachtelt bezeichnet. Standardmäßig ist die geschachtelte Klasse privat.
Class Container
Class Nested
' Add code here.
End Class
End Class
Um eine Instanz der geschachtelten Klasse zu erstellen, verwenden Sie den Namen der Containerklasse und geben einen Punkt sowie anschließend den Namen der geschachtelten Klasse ein:
Dim nestedInstance As Container.Nested = New Container.Nested()
Zugriffsmodifizierer und Zugriffsebenen
Alle Klassen und Klassenmember können mit Zugriffsmodifizierern angeben, welche Zugriffsebene sie für andere Klassen bereitstellen.
Die folgenden Zugriffsmodifizierer sind verfügbar:
Visual Basic-Modifizierer | Definition |
---|---|
Public | Auf den Typ oder Member kann von jedem Code in der gleichen Assembly oder einer anderen Assembly, die darauf verweist, zugegriffen werden. |
Privat | Auf den Typ oder Member kann nur von Code in der gleichen Klasse zugegriffen werden. |
Protected | Auf den Typ oder Member kann nur von Code in der gleichen Klasse oder in einer abgeleiteten Klasse zugegriffen werden. |
Friend | Auf den Typ oder Member kann von jedem Code in der gleichen Assembly zugegriffen werden, jedoch nicht von Code in einer anderen Assembly. |
Protected Friend |
Auf den Typ oder Member kann von jedem Code in der gleichen Assembly oder von jeder abgeleiteten Klasse in einer anderen Assembly zugegriffen werden. |
Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.
Instanziieren von Klassen
Um ein Objekt zu erstellen, müssen Sie eine Klasse instanziieren oder eine Klasseninstanz erstellen.
Dim sampleObject as New SampleClass()
Nachdem Sie eine Klasse instanziiert haben, können Sie den Eigenschaften und Feldern der Instanz Werte zuweisen und Klassenmethoden aufrufen.
' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
Verwenden Sie Objektinitialisierer, um Eigenschaften im Rahmen des Klasseninstanziierungsprozesses Werte zuzuweisen:
Dim sampleObject = New SampleClass With
{.FirstProperty = "A", .SecondProperty = "B"}
Weitere Informationen finden Sie unter:
Freigegebene Klassen und Member
Ein freigegebener Member der Klasse ist eine Eigenschaft, eine Prozedur oder ein Feld, die bzw. das von allen Instanzen einer Klasse gemeinsam verwendet werden.
So definieren Sie einen freigegebenen Member:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
Verwenden Sie für den Zugriff auf den freigegebenen Member den Namen der Klasse, ohne ein Objekt dieser Klasse zu erstellen:
MsgBox(SampleClass.SampleString)
Freigegebene Member in Visual Basic umfassen ausschließlich freigegebene Member und können nicht instanziiert werden. Freigegebene Membern ist es außerdem nicht möglich, auf nicht freigegebene Eigenschaften, Felder oder Methoden zuzugreifen.
Weitere Informationen findest du unter:
Anonyme Typen
Mit anonymen Typen können Objekte erstellt werden, ohne eine Klassendefinition für den Datentyp zu schreiben. Stattdessen erzeugt der Compiler eine Klasse. Die Klasse hat keinen verwendbaren Namen und enthält die von Ihnen in der Deklaration des Objekts angegebenen Eigenschaften.
So erstellen Sie eine Instanz eines anonymen Typs
' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
New With {Key .FirstProperty = "A", .SecondProperty = "B"}
Weitere Informationen finden Sie unter: Anonyme Typen.
Vererbung
Vererbung ermöglicht die Erstellung neuer Klassen, die in anderen Klassen definiertes Verhalten wieder verwenden, erweitern und ändern. Die Klasse, deren Member vererbt werden, wird Basisklasse genannt, und die Klasse, die diese Member erbt, wird abgeleitete Klasse genannt. Alle Klassen in Visual Basic erben jedoch implizit von der Klasse Object, die die .NET-Klassenhierarchie unterstützt und Low-Level-Dienste für alle Klassen bereitstellt.
Hinweis
Visual Basic unterstützt keine mehrfache Vererbung. Sie können also nur eine Basisklasse für eine abgeleitete Klasse angeben.
So erben Sie von einer Basisklasse
Class DerivedClass
Inherits BaseClass
End Class
Standardmäßig können alle Klassen geerbt werden. Sie können jedoch angeben, dass eine Klasse nicht als Basisklasse verwendet werden darf, oder eine Klasse erstellen, die nur als Basisklasse verwendet werden kann.
So geben Sie an, dass eine Klasse nicht als Basisklasse verwendet werden kann
NotInheritable Class SampleClass
End Class
So geben Sie an, dass eine Klasse nur als Basisklasse verwendet und nicht instanziiert werden kann:
MustInherit Class BaseClass
End Class
Weitere Informationen finden Sie unter:
Überschreiben von Membern
Standardmäßig erbt eine abgeleitete Klasse alle Member von ihrer Basisklasse. Wenn Sie das Verhalten des geerbten Members ändern möchten, müssen Sie diesen überschreiben. Das heißt, Sie können eine neue Implementierung der Methode, der Eigenschaft oder des Ereignisses in der abgeleiteten Klasse definieren.
Mit folgenden Modifizierern steuern Sie das Überschreiben von Eigenschaften und Methoden:
Visual Basic-Modifizierer | Definition |
---|---|
Overrides | Ermöglicht das Überschreiben eines Klassenmembers in einer abgeleiteten Klasse. |
Überschreibt | Überschreibt einen virtuellen (überschreibbaren) Member, der in der Basisklasse definiert wurde. |
NotOverridable | Verhindert das Überschreiben eines Members in einer erbenden Klasse. |
MustOverride | Erfordert das Überschreiben eines Klassenmembers in der abgeleiteten Klasse. |
Schatten | Blendet einen von einer Basisklasse geerbten Member aus. |
Schnittstellen
Schnittstellen definieren (wie Klassen) einen Satz von Eigenschaften, Methoden und Ereignissen. Im Gegensatz zu Klassen jedoch bieten Schnittstellen keine Implementierung. Sie werden durch Klassen implementiert und als von Klassen unabhängige Entitäten definiert. Eine Schnittstelle stellt insofern einen Vertrag dar, dass eine Klasse, die eine Schnittstelle implementiert, jeden Aspekt dieser Schnittstelle gemäß seiner Definition implementieren muss.
So definieren Sie eine Schnittstelle
Public Interface ISampleInterface
Sub DoSomething()
End Interface
So implementieren Sie eine Schnittstelle in einer Klasse
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
Weitere Informationen findest du unter:
Generics
Klassen, Strukturen, Schnittstellen und Methoden in .NET können Typparameter enthalten, die Objekttypen definieren, die sie speichern oder verwenden können. Das einfachste Beispiel für Generics ist eine Auflistung, in der Sie den Typ von Objekten angeben können, die in einer Auflistung gespeichert werden sollen.
So definieren Sie eine generische Klasse
Class SampleGeneric(Of T)
Public Field As T
End Class
So erstellen Sie eine Instanz einer generischen Klasse
Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
Weitere Informationen finden Sie unter:
Delegaten
Ein Delegat ist ein Typ, der eine Methodensignatur definiert. Er kann einen Verweis auf jede Methode bereitstellen, die über eine kompatible Signatur verfügt. Sie können die Methode über den Delegaten aufrufen. Delegaten werden verwendet, um Methoden als Argumente an anderen Methoden zu übergeben.
Hinweis
Ereignishandler sind nichts weiter als Methoden, die durch Delegaten aufgerufen werden. Weitere Informationen zur Ereignisbehandlung mit Delegaten finden Sie unter Ereignisse.
So erstellen Sie einen Delegaten
Delegate Sub SampleDelegate(ByVal str As String)
So erstellen Sie einen Verweis auf eine Methode, die der vom Delegaten angegebenen Signatur entspricht:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
Weitere Informationen findest du unter: