Condividi tramite


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

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

  2. In Esplora soluzioni selezionare Persons.vb, quindi scegliere Codice dal menu Visualizza.

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

  1. Aggiungere il codice di dichiarazione riportato di seguito sotto le altre dichiarazioni nella parte superiore del modulo di classe.

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

Altre risorse

Programmazione a oggetti: utilizzo di classi