Aggiunta di proprietà a una classe
Aggiornamento: novembre 2007
In questa lezione verrà descritto come aggiungere proprietà alla classe creata nella lezione precedente.
In una lezione precedente, Informazioni dettagliate: proprietà, metodi ed eventi, è stata spiegato che tutti gli oggetti dispongono di attributi e che le proprietà rappresentano tali attributi. Nella lezione precedente è stata creata una classe Persons che rappresenta una persona. Poiché le persone hanno attributi come il nome o l'età, la classe Persons deve disporre di proprietà che rappresentino tali attributi.
Le proprietà possono essere aggiunte a una classe in due modi: sotto forma di un campo oppure sotto forma di una routine della proprietà. È inoltre possibile determinare il funzionamento di una proprietà tramite l'utilizzo del modificatore Public, ReadOnly o WriteOnly.
Campi e routine della proprietà
I campi sono semplicemente variabili pubbliche all'interno di una classe che è possibile impostare o leggere all'esterno della classe e risultano utili per proprietà che non devono essere convalidate, ad esempio un valore Boolean (True o False). Nel caso della classe Persons, potrebbe esistere una proprietà Boolean denominata Married che specifica se una persona è single o sposata. Poiché i possibili valori sono solo due, per questa proprietà è possibile utilizzare un campo.
Il codice da utilizzare per aggiungere un campo a una classe è simile a quello riportato di seguito.
Public Married As Boolean
La maggior parte delle proprietà è tuttavia più complessa: è spesso necessario utilizzare una routine della proprietà per aggiungere una proprietà a una classe. Le routine della proprietà sono costituite da tre parti: una dichiarazione di una variabile privata per l'archiviazione del valore della proprietà, una routine Get che espone il valore e una routine Set che imposta il valore.
Di seguito è riportata una routine della proprietà di esempio per una proprietà Name della classe Persons.
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
Nella prima riga di codice viene dichiarata una variabile String privata, nameValue, nella quale verrà archiviato il valore della proprietà. La routine della proprietà vera e propria ha inizio con Public Property e termina con End Property.
La routine Get contiene il codice che verrà eseguito quando si legge il relativo valore. Se ad esempio si legge la proprietà Persons.Name, il codice restituirà il valore archiviato nella variabile nameValue.
La routine Set contiene il codice utilizzato per assegnare un nuovo valore alla variabile nameValue utilizzando un valore passato come argomento value. Se ad esempio è stato scritto il codice Persons.Name = "John", il valore StringJohn verrà passato come argomento value. Il codice nella routine Set assegnerà quindi tale valore alla variabile NameValue a scopo di archiviazione.
È possibile che sorgano dubbi sulla necessità di ricorrere a questa complessa procedura anziché utilizzare un campo per rappresentare la proprietà Name. Nel mondo reale esistono determinate regole per i nomi, ad esempio i nomi in genere non contengono numeri. Questa tecnica consente di aggiungere codice alla routine Set per controllare l'argomento value e restituire un errore se il nome contiene dei numeri.
Nella procedura riportata di seguito verranno aggiunti un campo e tre proprietà alla classe Persons.
Procedura
Per aggiungere proprietà a una classe
Aprire il progetto Persons creato nella lezione precedente. Se questo progetto non è stato salvato, tornare prima alla lezione precedente Modelli di oggetti reali: creazione di una classe e completare le procedure indicate.
In Esplora soluzioni selezionare Persons.vb, quindi scegliere Codice dal menu Visualizza.
Aggiungere il codice di dichiarazione riportato di seguito sotto la riga Public Class Persons.
Private firstNameValue As String Private middleNameValue As String Private lastNameValue As String Public Married As Boolean
Aggiungere le routine della proprietà riportate di seguito sotto il codice di dichiarazione.
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
Per salvare il lavoro, scegliere Salva tutto dal menu File.
Proprietà di sola lettura e di sola scrittura
Alcune proprietà vengono impostate una sola volta e non subiscono modifiche durante l'esecuzione del programma. Un esempio potrebbe essere una proprietà che rappresenta il numero di un dipendente. Questa proprietà potrà essere letta da un altro programma, ma è necessario impedire a tale programma di modificarne il valore.
Per specificare che il valore di una proprietà può essere letto ma non modificato viene utilizzata la parola chiave ReadOnly. Se si tenta di assegnare un valore a una proprietà ReadOnly, si verifica un errore nell'editor di codice.
Per creare una proprietà in sola lettura, è necessario creare una routine della proprietà con una routine Get, ma senza una routine Set, come illustrato di seguito.
Private IDValue As Integer
ReadOnly Property ID() As Integer
Get
ID = IDValue
End Get
End Property
In modo analogo, la parola chiave WriteOnly consente di impostare il valore di una proprietà, ma non di leggerlo. Ad esempio, è necessario impedire ad altri programmi di leggere una proprietà che rappresenta una password. Il valore della proprietà può essere utilizzato per eseguire operazioni all'interno della classe, ma deve rimanere privato.
Per creare una proprietà in sola scrittura, è necessario creare una proprietà con una routine Set, ma senza una routine Get, come illustrato di seguito.
Private passwordValue As String
WriteOnly Property Password() As String
Set(ByVal value As String)
passwordValue = value
End Set
End Property
Le routine della proprietà ReadOnly e WriteOnly risultano utili anche quando si desidera convertire il valore di una proprietà in un valore diverso. Ad esempio, l'età di una persona, a differenza del nome, cambia con il passare del tempo. L'eventuale età assegnata a una classe risulterà non corretta l'anno successivo.
Nella classe Persons è possibile evitare questa situazione tramite l'aggiunta di due proprietà: una proprietà BirthYear di tipo WriteOnly, che rappresenta l'anno di nascita e non cambia mai, e una proprietà Age di tipo ReadOnly, che restituisce un valore attraverso il calcolo della differenza tra l'anno corrente e l'anno di nascita.
Procedura
Per aggiungere proprietà in sola lettura e in sola scrittura alla classe
Aggiungere il codice di dichiarazione riportato di seguito sotto le altre dichiarazioni nella parte superiore del modulo di classe.
Private birthYearValue As Integer
Aggiungere le routine della proprietà riportate di seguito sotto il codice di dichiarazione.
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
Per salvare il lavoro, scegliere Salva tutto dal menu File.
Passaggi successivi
In questa lezione sono state fornite informazioni sulle proprietà e le diverse modalità in base a cui possono essere aggiunte a una classe. Nella lezione successiva verrà descritto come aggiungere metodi a una classe per consentire l'esecuzione di azioni.
Lezione successiva: Aggiunta di metodi a una classe
Vedere anche
Attività
Modelli di oggetti reali: creazione di una classe
Concetti
Routine delle proprietà e campi