Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Objekt ist eine Kombination aus Code und Daten, die als Einheit behandelt werden können. Ein Objekt kann ein Teil einer Anwendung sein, z. B. ein Steuerelement oder ein Formular. Eine gesamte Anwendung kann auch ein Objekt sein.
Wenn Sie eine Anwendung in Visual Basic erstellen, arbeiten Sie ständig mit Objekten. Sie können Objekte verwenden, die von Visual Basic bereitgestellt werden, z. B. Steuerelemente, Formulare und Datenzugriffsobjekte. Sie können auch Objekte aus anderen Anwendungen in Ihrer Visual Basic-Anwendung verwenden. Sie können sogar eigene Objekte erstellen und zusätzliche Eigenschaften und Methoden dafür definieren. Objekte wirken wie vorgefertigte Bausteine für Programme – sie ermöglichen es Ihnen, einen Code einmal zu schreiben und sie immer wiederzuverwenden.
In diesem Thema werden Die Objekte ausführlich erläutert.
Objekte und Klassen
Jedes Objekt in Visual Basic wird durch eine Klasse definiert. Eine Klasse beschreibt die Variablen, Eigenschaften, Prozeduren und Ereignisse eines Objekts. Objekte sind Instanzen von Klassen; Sie können beliebig viele Objekte erstellen, nachdem Sie eine Klasse definiert haben.
Um die Beziehung zwischen einem Objekt und seiner Klasse zu verstehen, stellen Sie sich Ausstechformen und Kekse vor. Die Ausstechform ist die Klasse. Es definiert die Merkmale der einzelnen Cookies, z. B. Größe und Form. Die Klasse wird zum Erstellen von Objekten verwendet. Die Objekte sind die Cookies.
Sie müssen ein Objekt erstellen, bevor Sie auf seine Mitglieder zugreifen können, mit Ausnahme von Shared
Mitgliedern, auf die ohne ein Objekt der Klasse zugegriffen werden kann.
Erstellen eines Objekts aus einer Klasse
Bestimmen Sie, aus welcher Klasse Sie ein Objekt erstellen möchten, oder definieren Sie Ihre eigene Klasse. Beispiel:
Public Class Customer Public Property AccountNumber As Integer End Class
Schreiben Sie eine Dim-Anweisung , um eine Variable zu erstellen, der Sie eine Klasseninstanz zuweisen können. Die Variable sollte vom Typ der gewünschten Klasse sein.
Dim nextCustomer As Customer
Fügen Sie das Schlüsselwort New Operator hinzu, um die Variable einer neuen Instanz der Klasse zu initialisieren.
Dim nextCustomer As New Customer
Sie können jetzt über die Objektvariable auf die Member der Klasse zugreifen.
nextCustomer.AccountNumber = lastAccountNumber + 1
Hinweis
Wenn möglich, sollten Sie die Variable als den Klassentyp deklarieren, den Sie ihm zuweisen möchten. Dies wird als frühe Bindung bezeichnet. Wenn Sie den Klassentyp zur Kompilierungszeit nicht kennen, können Sie späte Bindung aufrufen, indem Sie die Variable als Objektdatentyp deklarieren. Die späte Bindung kann jedoch die Leistung langsamer machen und den Zugriff auf die Elemente des Laufzeitobjekts einschränken. Weitere Informationen finden Sie unter Objektvariablendeklaration.
Mehrere Instanzen
Objekte, die aus einer Klasse neu erstellt wurden, sind häufig identisch mit einander. Sobald sie als einzelne Objekte vorhanden sind, können ihre Variablen und Eigenschaften jedoch unabhängig von den anderen Instanzen geändert werden. Wenn Sie beispielsweise einem Formular drei Kontrollkästchen hinzufügen, ist jedes Kontrollkästchenobjekt eine Instanz der CheckBox Klasse. Die einzelnen CheckBox Objekte teilen einen gemeinsamen Satz von Merkmalen und Funktionen (Eigenschaften, Variablen, Prozeduren und Ereignisse), die von der Klasse definiert werden. Jeder hat jedoch einen eigenen Namen, kann separat aktiviert und deaktiviert werden und kann an einer anderen Stelle im Formular platziert werden.
Elemente des Objekts
Ein Objekt ist ein Element einer Anwendung, das eine Instanz einer Klasse darstellt. Felder, Eigenschaften, Methoden und Ereignisse sind die Bausteine von Objekten und stellen ihre Member dar.
Mitgliedzugriff
Sie greifen auf ein Element eines Objekts zu, indem Sie in der Reihenfolge den Namen der Objektvariable, einen Punkt (.
) und den Namen des Elements angeben. Im folgenden Beispiel wird die Text Eigenschaft eines Label Objekts festgelegt.
warningLabel.Text = "Data not saved"
IntelliSense-Auflistung von Mitgliedern
IntelliSense listet die Member einer Klasse auf, wenn Sie die Option „Member auflisten“ aufrufen, beispielsweise wenn Sie einen Punkt (.
) als Memberzugriffsoperator eingeben. Wenn Sie den Punkt nach dem Namen einer Variablen eingeben, die als Instanz dieser Klasse deklariert war, listet IntelliSense alle Instanzmember und keinen der freigegebenen Member auf. Wenn Sie den Punkt nach dem Klassennamen selbst eingeben, listet IntelliSense alle freigegebenen Member und keinen der Instanzmember auf. Weitere Informationen finden Sie unter Verwenden von IntelliSense.
Felder und Eigenschaften
Felder und Eigenschaften stellen Informationen dar, die in einem Objekt gespeichert sind. Sie rufen ihre Werte mit Zuordnungsanweisungen auf die gleiche Weise ab, wie Sie lokale Variablen in einer Prozedur abrufen und festlegen. Im folgenden Beispiel wird die Width Eigenschaft abgerufen und die ForeColor Eigenschaft eines Label Objekts festgelegt.
Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red
Beachten Sie, dass ein Feld auch als Membervariable bezeichnet wird.
Verwenden Sie Eigenschaftenprozeduren in folgenden Fällen:
Sie müssen steuern, wann und wie ein Wert festgelegt oder abgerufen wird.
Die Eigenschaft verfügt über einen gut definierten Satz von Werten, die überprüft werden müssen.
Das Festlegen des Werts führt zu einer spürbaren Änderung des Zustands des Objekts, z. B. einer
IsVisible
Eigenschaft.Durch festlegen der Eigenschaft werden Änderungen an anderen internen Variablen oder den Werten anderer Eigenschaften verursacht.
Bevor die Eigenschaft festgelegt oder abgerufen werden kann, muss eine Reihe von Schritten ausgeführt werden.
Verwenden Sie Felder in folgenden Fällen:
Der Wert ist der eines sich selbst überprüfenden Typs. Beispielsweise tritt ein Fehler oder eine automatische Datenkonvertierung auf, wenn ein anderer Wert als
True
oderFalse
einerBoolean
Variablen zugewiesen ist.Ein beliebiger Wert im bereich, der vom Datentyp unterstützt wird, ist gültig. Dies gilt für viele Eigenschaften vom Typ
Single
oderDouble
.Die Eigenschaft ist ein
String
Datentyp, und es gibt keine Einschränkung für die Größe oder den Wert der Zeichenfolge.Weitere Informationen finden Sie unter Property Procedures.
Tipp
Behalten Sie immer die nicht konstanten Felder privat. Wenn Sie sie öffentlich machen möchten, verwenden Sie stattdessen eine Eigenschaft.
Methodik
Eine Methode ist eine Aktion, die ein Objekt ausführen kann. Beispielsweise ist Add eine Methode des ComboBox Objekts, die einen neuen Eintrag zu einer Combo-Box hinzufügt.
Im folgenden Beispiel wird die Start Methode eines Timer Objekts veranschaulicht.
Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()
Beachten Sie, dass eine Methode einfach eine Prozedur ist, die von einem Objekt verfügbar gemacht wird.
Weitere Informationen finden Sie unter Prozeduren.
Ereignisse
Ein Ereignis ist eine aktion, die von einem Objekt erkannt wird, z. B. durch Klicken auf die Maus oder Drücken einer Taste, und für die Sie Code schreiben können, um zu reagieren. Ereignisse können als Ergebnis einer Benutzeraktion oder eines Programmcodes auftreten oder durch das System verursacht werden. Code, der ein Ereignis signalisiert, soll das Ereignis auslösen, und Code, der darauf antwortet, soll es abwickeln.
Sie können auch eigene benutzerdefinierte Ereignisse entwickeln, die von Ihren Objekten ausgelöst und von anderen Objekten behandelt werden. Weitere Informationen finden Sie unter "Ereignisse".
Instanzmember und freigegebene Member
Wenn Sie ein Objekt aus einer Klasse erstellen, ist das Ergebnis eine Instanz dieser Klasse. Elemente, die nicht mit dem Schlüsselwort "Shared" deklariert sind, sind Instanzmember, die streng zu dieser bestimmten Instanz gehören. Ein Instanzmemm in einer Instanz ist unabhängig vomselben Element in einer anderen Instanz derselben Klasse. Eine Instanzmitgliedervariable kann zum Beispiel unterschiedliche Werte in verschiedenen Instanzen haben.
Elemente, die mit dem Shared
Schlüsselwort deklariert werden, sind Shared-Member, die der gesamten Klasse und nicht einer bestimmten Instanz zugehören. Ein freigegebener Member ist nur einmal vorhanden, unabhängig davon, wie viele Instanzen seiner Klasse Sie erstellen oder ob Sie keine Instanzen erstellen. Ein freigegebenes Mitgliedsvariable hat beispielsweise nur einen Wert, der für allen Code verfügbar ist, der auf die Klasse zugreifen kann.
Zugreifen auf nicht freigegebene Member
Stellen Sie sicher, dass das Objekt aus seiner Klasse erstellt und einer Objektvariable zugewiesen wurde.
Dim secondForm As New System.Windows.Forms.Form
Führen Sie in der Anweisung, die auf den Member zugreift, den Namen der Objektvariablen mit dem Memberzugriffsoperator (
.
) und dann dem Membernamen an.secondForm.Show()
Zugreifen auf freigegebene Member
Führen Sie den Klassennamen mit dem Memberzugriffsoperator (
.
) und dann den Membernamen an. Sie sollten immer direkt über den Klassennamen auf einShared
Element des Objekts zugreifen.Console.WriteLine("This computer is called " & Environment.MachineName)
Wenn Sie bereits ein Objekt aus der Klasse erstellt haben, können Sie alternativ über die Variable des Objekts auf ein
Shared
Element zugreifen.
Unterschiede zwischen Klassen und Modulen
Der Hauptunterschied zwischen Klassen und Modulen besteht darin, dass Klassen als Objekte instanziiert werden können, während Standardmodule nicht möglich sind. Da nur eine Kopie der Daten eines Standardmoduls vorhanden ist, wenn ein Teil Ihres Programms eine öffentliche Variable in einem Standardmodul ändert, erhält jeder andere Teil des Programms denselben Wert, wenn er diese Variable anschließend liest. Im Gegensatz dazu sind Objektdaten für jedes instanziierte Objekt separat vorhanden. Ein weiterer Unterschied besteht darin, dass Klassen im Gegensatz zu Standardmodulen Schnittstellen implementieren können. Wenn eine Klasse mit dem MustInherit-Modifizierer gekennzeichnet ist, kann sie nicht direkt instanziiert werden. Es unterscheidet sich jedoch immer noch von einem Modul, da es geerbt werden kann, während Module nicht geerbt werden können.
Hinweis
Wenn der Shared
Modifizierer auf ein Klassenelement angewendet wird, wird er der Klasse selbst anstelle einer bestimmten Instanz der Klasse zugeordnet. Auf das Mitglied wird direkt über den Klassennamen zugegriffen, genauso wie auf Modulmitglieder.
Klassen und Module verwenden auch unterschiedliche Gültigkeitsbereiche für ihre Mitglieder. Elemente, die innerhalb einer Klasse definiert sind, sind innerhalb einer bestimmten Instanz der Klasse definiert und nur für die Lebensdauer des Objekts vorhanden. Um auf Klassenmember von außerhalb einer Klasse zuzugreifen, müssen Sie vollqualifizierte Namen im Objektformat verwenden.Mitglied.
Andererseits sind Mitglieder, die in einem Modul deklariert sind, standardmäßig öffentlich zugänglich und können von jedem Code aufgerufen werden, der auf das Modul zugreifen kann. Dies bedeutet, dass Variablen in einem Standardmodul effektiv globale Variablen sind, da sie von überall in Ihrem Projekt aus sichtbar sind und für die Lebensdauer des Programms vorhanden sind.
Erneutes Verwenden von Klassen und Objekten
Mit Objekten können Sie Variablen und Prozeduren einmal deklarieren und sie dann bei Bedarf wiederverwenden. Wenn Sie beispielsweise einer Anwendung eine Rechtschreibprüfung hinzufügen möchten, können Sie alle Variablen definieren und unterstützende Funktionen bereitstellen, um die Rechtschreibprüfungsfunktionen bereitzustellen. Wenn Sie Die Rechtschreibprüfung als Klasse erstellen, können Sie sie dann in anderen Anwendungen wiederverwenden, indem Sie einen Verweis auf die kompilierte Assembly hinzufügen. Sie können sich möglicherweise sogar selbst etwas Arbeit sparen, indem Sie eine Rechtschreibprüfungsklasse verwenden, die bereits von jemand anderem entwickelt wurde.
.NET enthält viele Beispiele für Komponenten, die zur Verwendung verfügbar sind. Im folgenden Beispiel wird die TimeZone Klasse im System Namespace verwendet. TimeZone enthält Member, die Ihnen das Abrufen von Informationen über die Zeitzone des aktuellen Computersystems ermöglichen.
Public Sub ExamineTimeZone()
Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
Dim s As String = "Current time zone is "
s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
s &= "different from UTC (coordinated universal time)"
s &= vbCrLf & "and is currently "
If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
s &= "on ""summer time""."
Console.WriteLine(s)
End Sub
Im vorherigen Beispiel deklariert die erste Dim-Anweisung eine Objektvariable vom Typ TimeZone und weist ihr ein TimeZone objekt zu, das von der CurrentTimeZone Eigenschaft zurückgegeben wird.
Beziehungen zwischen Objekten
Objekte können auf verschiedene Arten miteinander verknüpft werden. Die Prinzipaltypen der Beziehung sind hierarchisch und eindämmend.
Hierarchische Beziehung
Wenn Klassen von grundlegenderen Klassen abgeleitet werden, werden sie als hierarchische Beziehung bezeichnet. Klassenhierarchien sind hilfreich beim Beschreiben von Elementen, die ein Untertyp einer allgemeineren Klasse sind.
Angenommen, Sie möchten im folgenden Beispiel eine spezielle Art von Button definieren, die wie eine normale Button funktioniert, aber auch eine Methode bereitstellt, die die Vordergrund- und Hintergrundfarben umkehrt.
Definieren einer Klasse, die von einer bereits vorhandenen Klasse abgeleitet wird
Verwenden Sie eine Class-Anweisung , um eine Klasse zu definieren, aus der das benötigte Objekt erstellt werden soll.
Public Class ReversibleButton
Stellen Sie sicher, dass eine
End Class
Anweisung der letzten Codezeile in Ihrer Klasse folgt. Standardmäßig generiert die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) automatisch eineEnd Class
Anweisung, wenn Sie eineClass
Anweisung eingeben.Der
Class
-Anweisung muss sofort eine Inherits-Anweisung folgen. Geben Sie die Klasse an, von der ihre neue Klasse abgeleitet wird.Inherits System.Windows.Forms.Button
Ihre neue Klasse erbt alle Elemente, die von der Basisklasse definiert wurden.
Fügen Sie den Code für die zusätzlichen Member hinzu, die Ihre abgeleitete Klasse zur Verfügung stellt. Sie können z. B. eine
ReverseColors
Methode hinzufügen, und Ihre abgeleitete Klasse sieht wie folgt aus:Public Class ReversibleButton Inherits System.Windows.Forms.Button Public Sub ReverseColors() Dim saveColor As System.Drawing.Color = Me.BackColor Me.BackColor = Me.ForeColor Me.ForeColor = saveColor End Sub End Class
Wenn Sie ein Objekt aus der
ReversibleButton
Klasse erstellen, kann es auf alle Member der Button Klasse sowie auf dieReverseColors
Methode und alle anderen neuen Member zugreifen, die Sie inReversibleButton
definieren.
Abgeleitete Klassen erben Mitglieder von der Basisklasse, sodass Sie beim Fortschreiten in einer Klassenhierarchie Komplexität hinzufügen können. Weitere Informationen finden Sie unter "Vererbungsgrundlagen".
Kompilieren des Codes
Stellen Sie sicher, dass der Compiler auf die Klasse zugreifen kann, von der Sie die neue Klasse ableiten möchten. Dies kann das vollständige Qualifizieren des Namens beinhalten, wie im vorherigen Beispiel, oder das Identifizieren des Namespace in einer Imports-Anweisung (.NET Namespace und Typ). Wenn sich die Klasse in einem anderen Projekt befindet, müssen Sie möglicherweise einen Verweis auf dieses Projekt hinzufügen. Weitere Informationen finden Sie unter Verwalten von Verweisen in einem Projekt.
Einschlussbeziehung
Eine weitere Möglichkeit, mit der Objekte verknüpft werden können, ist eine Eindämmungsbeziehung. Containerobjekte kapseln logisch andere Objekte. Zum Beispiel enthält das OperatingSystem-Objekt logisch ein Version-Objekt, das durch seine Version-Eigenschaft zurückgegeben wird. Beachten Sie, dass das Containerobjekt kein anderes Objekt enthält.
Sammlungen
Ein bestimmter Objekteinschlusstyp wird durch Sammlungen dargestellt. Auflistungen sind Gruppen ähnlicher Objekte, die aufgezählt werden können. Visual Basic unterstützt eine bestimmte Syntax in der For Each...Next-Anweisung, die es Ihnen ermöglicht, durch die Elemente einer Sammlung zu iterieren. Zudem ermöglichen Auflistungen die Verwendung eines Item[]-Elements zum Abrufen von Elementen anhand ihres Indexes oder anhand der Zuordnung zu einer eindeutigen Zeichenfolge. Sammlungen können einfacher als Arrays verwendet werden, da sie es Ihnen ermöglichen, Elemente hinzuzufügen oder zu entfernen, ohne Indizes zu verwenden. Aufgrund ihrer benutzerfreundlichkeit werden Sammlungen häufig zum Speichern von Formularen und Steuerelementen verwendet.
Zugehörige Themen
Anleitung: Definieren von Klassen
Enthält eine schrittweise Beschreibung der Erstellung einer Klasse.
Überladene Eigenschaften und Methoden
Überladene Eigenschaften und Methoden
Vererbungsgrundlagen
Behandelt Vererbungsmodifizierer, das Überschreiben von Methoden und Eigenschaften, MyClass und MyBase.
Objektlebensdauer: Wie Objekte erstellt und zerstört werden
Erläutert das Erstellen und Löschen von Klasseninstanzen.
Anonyme Typen
Beschreibt, wie anonyme Typen erstellt und verwendet werden, mit denen Sie Objekte erstellen können, ohne eine Klassendefinition für den Datentyp zu schreiben.
Objektinitialisierer: Benannte und anonyme Typen
Erläutert Objektinitialisierer, die zum Erstellen von Instanzen benannter und anonymer Typen mithilfe eines einzelnen Ausdrucks verwendet werden.
Vorgehensweise: Ableiten von Eigenschaftsnamen und -typen in anonymen Typdeklarationen
Erläutert, wie sich Eigenschaftennamen und Typen in anonymen Typdeklarationen ableiten lassen. Stellt Beispiele für erfolgreiche und erfolglose Rückschlüsse bereit.