Property in Visual Basic dient der Kapselung des Zugangs zu den Daten eines Objekts mit der Möglichkeit zur Überprüfung, Berechnung und Steuerung des Zugriffs. Eigenschaften enthalten die Blöcke Get (zum Lesen des Wertes) und Set (zum Festlegen des Wertes).
Private _age As Integer Public Property Age() As Integer Get Return _age End Get Set(ByVal value As Integer) If value < 0 Or value > 120 Then Throw New ArgumentException("Das Alter muss zwischen 0 und 120 liegen!") End If _age = value End Set End Property
Mit einer solchen Eigenschaft kann die Validierung von Werten, Caching, Berechnung zur Laufzeit usw. umgesetzt werden, und für den Benutzer sieht das Objekt so aus, als wäre es ein reguläres Feld.
Public Property ItemId As Integer ' erstellt automatisch ein verstecktes Feld, kein Zugriff auf die Logik
Hinweis: Automatische Eigenschaften können nicht ohne explizite Deklaration von Get/Set um interne Logik erweitert werden.
Frage: Kann man in Visual Basic eine Eigenschaft mit nur öffentlichem Set und privatem Get implementieren? Wie kann man verschiedene Zugriffslevel für Get und Set richtig festlegen?
Antwort: Ja, seit VB.NET können verschiedene Zugriffslevel für Get und Set angegeben werden:
Public Property Salary As Decimal Private Get Return _salary End Get Set(ByVal value As Decimal) _salary = value End Set End Property
In diesem Beispiel kann nur die Klasse den Wert von Salary abfragen, externe Objekte können nur den Wert setzen.
Geschichte
Ein Entwickler verwendete automatische Eigenschaften für alle Felder des Geschäftsobjekts. Später wurde eine Validierung für negative Eingabewerte erforderlich, aber die Änderung von automatischen Eigenschaften zu expliziten erforderte manuelle Änderungen eines großen Teils des Codes, was zu Fehlern und Arbeitsaufwand führte.
Geschichte
Bei der Migration von VB6 zu VB.NET wurden einige Eigenschaften als Felder mit öffentlichen Zugriffsmodifikatoren implementiert: Dies öffnete den vollständigen unautorisierten Zugriff auf interne Daten der Klasse, was zu unerwünschten Änderungen des Zustands durch externe Objekte führte.
Geschichte
In einem komplexen Objekt enthielt die Eigenschaft im Get-Block zusätzliche Berechnungen, einschließlich der Arbeit mit Dateien. Bei hoher Frequenz des Zugriffs auf die Eigenschaft fiel die Leistung der Anwendung stark ab; es stellte sich heraus, dass es besser gewesen wäre, ein privates Feld mit dem Caching des Ergebnisses zu verwenden, anstatt den Wert bei jedem Get zur Laufzeit zu berechnen.