Freigeben über


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

  1. Ö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.

  2. Wählen Sie im Projektmappen-Explorer die Option Persons.vb und anschließend im Menü Ansicht die Option Code aus.

  3. 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
    
  4. 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
    
  5. 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

  1. Fügen Sie unterhalb der anderen Deklarationen am Anfang des Klassenmoduls folgenden Deklarationscode hinzu.

    Private birthYearValue As Integer
    
  2. 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
    
  3. 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

Weitere Ressourcen

Programmieren mit Objekten: Verwenden von Klassen