Hinzufügen von Eigenschaften zu einer Klasse
Aktualisiert: November 2007
In dieser Lektion erfahren Sie, wie Sie der in der vorherigen Lektion erstellten Klasse Eigenschaften hinzufügen.
In einer früheren Lektion, Genauere Betrachtung: Eigenschaften, Methoden und Ereignisse, haben Sie gelernt, dass alle Objekte Attribute besitzen und dass Eigenschaften Attribute darstellen. In der vorherigen Lektion haben Sie eine Persons-Klasse erstellt, die eine Person darstellt. Personen besitzen Attribute wie Name und Alter, d. h., die Persons-Klasse benötigt Eigenschaften, um diese Attribute darzustellen.
Es gibt zwei Möglichkeiten, um einer Klasse Eigenschaften hinzuzufügen: als Feld oder als Eigenschaftenprozedur. Außerdem können Sie mithilfe der Modifizierer Public, ReadOnly oder WriteOnly die Funktionsweise einer Eigenschaft festlegen.
Felder und Eigenschaftenprozeduren
Felder sind öffentliche Variablen innerhalb einer Klasse, die von außerhalb der Klasse festgelegt und gelesen werden können. Sie sind nützlich für Eigenschaften, die nicht validiert werden müssen – beispielsweise ein Boolean-Wert (True oder False). Im Fall der Persons-Klasse könnte eine Boolean-Eigenschaft mit der Bezeichnung Married vorhanden sein, die angibt, ob die Person alleinstehend oder verheiratet ist. Da es hierbei nur zwei mögliche Werte gibt, stellt ein Feld für diese Eigenschaft eine gute Wahl dar.
Um einer Klasse ein Feld hinzuzufügen, würde der Code folgendermaßen aussehen.
Public Married As Boolean
Die meisten Eigenschaften sind jedoch etwas komplexer. In diesen Fällen sollten Sie eine Eigenschaftenprozedur zum Hinzufügen einer Eigenschaft zu einer Klasse verwenden. Eigenschaftenprozeduren bestehen aus drei Teilen: einer Deklaration einer privaten Variablen zum Speichern des Eigenschaftenwerts; einer Get-Prozedur, die den Wert bereitstellt, und einer Set-Prozedur, mit der der Wert festgelegt werden kann.
Eine Eigenschaftenprozedur für eine Name-Eigenschaft für die Persons-Klasse würde beispielsweise folgendermaßen aussehen.
Private nameValue As String
Public Property Name() As String
Get
Name = nameValue
End Get
Set(ByVal value As String)
nameValue = value
End Set
End Property
Die erste Codezeile deklariert eine private String-Variable, nameValue, die den Wert der Eigenschaft speichert. Die eigentliche Eigenschaftenprozedur beginnt mit Public Property und endet mit End Property.
Die Get-Prozedur enthält den Code, der zum Lesen des Werts ausgeführt wird. Wenn Sie beispielweise die Persons.Name-Eigenschaft auslesen, würde der Code den in der nameValue-Variablen gespeicherten Wert zurückgeben.
Die Set-Prozedur enthält Code zum Zuweisen eines neuen Werts zur nameValue-Variablen, wobei der Wert als value-Argument übergeben wird. Wenn Sie beispielsweise den Code Persons.Name = "John" geschrieben haben, würde der String-Wert John als value-Argument übergeben werden. Der Code in der Set-Prozedur würde den Wert dann zum Speichern der NameValue-Variablen zuweisen.
Sie könnten sich jetzt fragen, warum Sie sich die ganze Mühe machen sollen, wenn Sie die Name-Eigenschaft doch auch durch ein Feld darstellen können. In der realen Welt gelten bestimmte Regeln für Namen, z. B. enthalten Namen in der Regel keine Zahlen. Sie könnten daher Code zu der Set-Prozedur hinzufügen, der das value-Argument überprüft und einen Fehler ausgibt, wenn das Argument Zahlen enthält.
In der folgenden Prozedur fügen Sie der Persons-Klasse ein Feld und drei Eigenschaften hinzu.
Übung
So fügen Sie der Klasse Eigenschaften hinzu
Öffnen Sie das in der vorherigen Lektion erstellte Persons-Projekt. Wenn Sie das Projekt nicht gespeichert haben, müssen Sie zuerst zur vorherigen Lektion, Modellieren eines realen Objekts: Erstellen der ersten Klasse, zurückkehren und die Prozeduren in der Lektion abschließen.
Wählen Sie im Projektmappen-Explorer die Option Persons.vb und anschließend im Menü Ansicht die Option Code aus.
Fügen Sie unter der Zeile Public Class Persons den folgenden Deklarationscode ein.
Private firstNameValue As String Private middleNameValue As String Private lastNameValue As String Public Married As Boolean
Fügen Sie die folgenden Eigenschaftenprozeduren unter dem Deklarationscode hinzu.
Public Property FirstName() As String Get FirstName = firstNameValue End Get Set(ByVal value As String) firstNameValue = value End Set End Property Public Property MiddleName() As String Get MiddleName = middleNameValue End Get Set(ByVal value As String) middleNameValue = value End Set End Property Public Property LastName() As String Get LastName = lastNameValue End Get Set(ByVal value As String) lastNameValue = value End Set End Property
Klicken Sie im Menü Datei auf Alle speichern, um die Änderungen zu speichern.
Schreibgeschützte und lesegeschützte Eigenschaften
Manchmal sollen Eigenschaften einmal festgelegt und dann während der Ausführung des Programms nicht mehr verändert werden. Eine Eigenschaft, die eine Angestelltennummer darstellt, soll beispielsweise nie geändert werden. Sie kann also von einem anderen Programm gelesen werden, jedoch darf der Wert von diesem Programm nicht geändert werden.
Um anzugeben, dass ein Eigenschaftenwert gelesen aber nicht verändert werden kann, wird das ReadOnly-Schlüsselwort verwendet. Wenn Sie versuchen, einer ReadOnly-Eigenschaft einen Wert zuzuweisen, tritt im Code-Editor ein Fehler auf.
Zum Festlegen einer schreibgeschützten Eigenschaft erstellen Sie folgendermaßen eine Eigenschaftenprozedur mit einer Get-Prozedur, jedoch ohne Set-Prozedur.
Private IDValue As Integer
ReadOnly Property ID() As Integer
Get
ID = IDValue
End Get
End Property
Auf ähnliche Weise ermöglicht das WriteOnly -Schlüsselwort, dass ein Eigenschaftenwert festgelegt, aber nicht gelesen werden kann. Beispielsweise möchten Sie nicht, dass eine Kennworteigenschaft von anderen Programmen gelesen werden kann. Sie können diesen Wert verwenden, um Aktionen innerhalb der Klasse auszuführen, die jedoch privat bleiben sollen.
Zum Festlegen einer lesegeschützten Eigenschaft erstellen Sie folgendermaßen eine Eigenschaftenprozedur mit einer Set-Prozedur, jedoch ohne Get-Prozedur.
Private passwordValue As String
WriteOnly Property Password() As String
Set(ByVal value As String)
passwordValue = value
End Set
End Property
ReadOnly- und WriteOnly-Eigenschaftenprozeduren sind auch hilfreich, wenn Sie einen Eigenschaftenwert abrufen und in einen anderen Wert konvertieren möchten. Nehmen Sie beispielsweise das Alter einer Person. Im Gegensatz zu einem Namen ändert sich das Alter mit der Zeit – wenn Sie Ihr Alter einer Klasse zugeordnet haben und es ein Jahr später wieder einlesen, ist es nicht mehr korrekt.
Sie können dies in der Persons-Klasse durch Hinzufügen von zwei Eigenschaften verhindern. Eine WriteOnlyBirthYear-Eigenschaft stellt das Geburtsjahr dar, das sich nicht ändert, und eine ReadOnlyAge-Eigenschaft gibt einen Wert zurück, der durch die Berechnung der Differenz zwischen dem aktuellen Jahr und dem Geburtsjahr bestimmt wird.
Übung
So fügen Sie der Klasse ReadOnly- und WriteOnly-Eigenschaften hinzu
Fügen Sie unterhalb der anderen Deklarationen am Anfang des Klassenmoduls folgenden Deklarationscode hinzu.
Private birthYearValue As Integer
Fügen Sie die folgenden Eigenschaftenprozeduren unter dem Deklarationscode hinzu.
WriteOnly Property BirthYear() As Integer Set(ByVal value As Integer) birthYearValue = value End Set End Property ReadOnly Property Age() As String Get Age = My.Computer.Clock.LocalTime.Year - birthYearValue End Get End Property
Klicken Sie im Menü Datei auf Alle speichern, um die Änderungen zu speichern.
Nächste Schritte
In dieser Lektion haben Sie etwas über Eigenschaften erfahren und wie Eigenschaften der Klasse hinzugefügt werden können. In der nächsten Lektion lernen Sie, wie Sie der Klasse Methoden hinzufügen, sodass diese Aktionen ausführen kann.
Nächste Lektion: Hinzufügen von Methoden zu einer Klasse
Siehe auch
Aufgaben
Modellieren eines realen Objekts: Erstellen der ersten Klasse
Konzepte
Property-Prozeduren oder Felder