Property in Visual Basic serve per incapsulare l'accesso ai dati di un oggetto con la possibilità di verifica, calcolo e configurazione del controllo accessi. Le proprietà contengono blocchi Get (per leggere il valore) e Set (per impostare il valore).
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("L'età deve essere compresa tra 0 e 120!") End If _age = value End Set End Property
Con questa proprietà è possibile implementare la validazione dei valori, la memorizzazione nella cache, il calcolo al volo, ecc., mentre per l'utente, l'oggetto appare come un campo normale.
Public Property ItemId As Integer ' crea automaticamente un campo nascosto, senza accesso alla logica
Sfumatura: le proprietà automatiche non possono essere ampliate con logica interna senza una dichiarazione esplicita di get/set.
Domanda: È possibile implementare una proprietà in Visual Basic con solo set pubblico e get privato? Come impostare correttamente diversi livelli di accesso per get e set?
Risposta: Sì, a partire da VB.NET è possibile specificare livelli di accesso diversi per get e set:
Public Property Salary As Decimal Private Get Return _salary End Get Set(ByVal value As Decimal) _salary = value End Set End Property
In questo esempio, solo la classe può ottenere il valore di Salary, mentre gli oggetti esterni possono solo impostarlo.
Storia
Un programmatore ha utilizzato proprietà automatiche per tutti i campi di un oggetto business. Successivamente, la validazione per l'immissione di valori negativi è diventata necessaria, ma cambiare la proprietà automatica in una esplicita richiedeva la modifica manuale di gran parte del codice, portando a errori e costi di lavoro.
Storia
Durante la migrazione da VB6 a VB.NET, alcune proprietà sono state implementate come campi con modificatori di accesso pubblici: questo ha aperto un accesso non autorizzato completo ai dati interni della classe, portando a modifiche indesiderate dello stato da parte di oggetti esterni.
Storia
In un oggetto complesso, la proprietà conteneva calcoli aggiuntivi nel blocco get, compresi lavori con file. Con una grande frequenza di accesso alla proprietà, le prestazioni dell'applicazione sono crollate; si è scoperto che sarebbe stato meglio usare un campo privato con un risultato memorizzato nella cache, piuttosto che calcolare il valore al volo ad ogni get.