Cenni preliminari sulle proprietà
Aggiornamento: novembre 2007
I componenti devono definire proprietà, anziché campi pubblici, perché le finestre di progettazione visiva come quelle di Visual Studio visualizzano proprietà, e non campi, nel visualizzatore proprietà. Alla fine di questo argomento vengono elencate altre importanti ragioni che spiegano la necessità di definire proprietà.
Le proprietà sono come campi intelligenti. Una proprietà dispone solitamente di un membro dati privato accompagnato da funzioni di accesso. Dal punto di vista sintattico vi si accede come a un campo di una classe. Benché le proprietà possano prevedere diversi livelli di accesso, l'analisi viene qui centrata sul più comune caso di accesso pubblico. Poiché le proprietà compaiono in Visual Basic da diverse versioni, è possibile che i programmatori Visual Basic desiderino saltare questo argomento.
La definizione di una proprietà è solitamente costituita dalle due parti seguenti:
Definizione di un membro dati privato.
private int number = 0;
Private number As Integer = 0
Definizione di una proprietà pubblica utilizzando la sintassi di dichiarazione delle proprietà. Tale sintassi associa il membro dati privato a una proprietà pubblica tramite le funzioni di accesso get e set.
public int MyNumber { // Retrieves the number data member. get { return number; } // Assigns to the number data member. set { number = value; } }
Public Property MyNumber As Integer ' Retrieves number. Get Return number End Get ' Assigns to number. Set number = value End Set End Property
Nella sintassi per la definizione delle proprietà il termine value è una parola chiave. La variabile value viene assegnata alla proprietà nel codice chiamante. Il tipo di value deve corrispondere al tipo in cui è dichiarata la proprietà a cui viene assegnato.
Benché una definizione di proprietà includa solitamente un membro dati privato, questo non è indispensabile. La funzione di accesso get potrebbe restituire un valore senza accedere a un membro dati privato. Si consideri ad esempio una proprietà il cui metodo get restituisce l'ora di sistema. Le proprietà abilitano l'occultamento dei dati. I metodi di accesso nascondono l'implementazione delle proprietà.
La sintassi adottata dai diversi linguaggi di programmazione per l'utilizzo delle proprietà non è sempre uniforme. Il termine property, ad esempio, non è una parola chiave in C#, ma lo è in Visual Basic. Per informazioni specifiche del linguaggio, fare riferimento alla documentazione del linguaggio stesso.
Nell'esempio che segue viene definita una proprietà denominata MyNumber nella classe SimpleProperty e si accede a MyNumber dalla classe UsesSimpleProperty.
public class SimpleProperty
{
private int number = 0;
public int MyNumber
{
// Retrieves the data member number.
get
{
return number;
}
// Assigns to the data member number.
set
{
number = value;
}
}
// Other members.
}
public class UsesSimpleProperty
{
public static void Main()
{
SimpleProperty example = new SimpleProperty();
// Sets the property.
example.MyNumber = 5;
// Gets the property.
int anumber = example.MyNumber;
}
}
Public Class SimpleProperty
Private number As Integer = 0
Public Property MyNumber As Integer
' Retrieves number.
Get
Return number
End Get
' Assigns to number.
Set
number = value
End Set
End Property
' Other members...
End Class
Public Class UsesSimpleProperty
Public Shared Sub Main()
Dim example As New SimpleProperty()
' Sets the property.
example.MyNumber = 5
' Gets the property.
Dim anumber As Integer = example.MyNumber
End Sub
End Class
I metodi get e set solitamente non differiscono da altri metodi. Possono infatti implementare qualsiasi logica di programma, generare eccezioni, essere sottoposti a override ed essere dichiarati con tutti i modificatori consentiti dal linguaggio di programmazione. Si noti che le proprietà possono essere anche statiche. Se una proprietà è statica, l'attività dei metodi get e set è soggetta ad alcune limitazioni. Per informazioni dettagliate, consultare i riferimenti del proprio linguaggio di programmazione.
Una proprietà può essere di un tipo primitivo, un insieme di tipi primitivi, un tipo definito dall'utente o un insieme di tipi definiti dall'utente. Per tutti i tipi primitivi, .NET Framework fornisce convertitori di tipo che implementano conversioni da stringa a valore. Per informazioni dettagliate, vedere Conversioni tra tipi generici. Quando un convertitore di tipo può essere utilizzato con una proprietà, sarà possibile elencarlo nel visualizzatore proprietà della finestra di progettazione. Se si definiscono proprietà personalizzate e si desidera che il visualizzatore proprietà le visualizzi, occorrerà implementare convertitori di tipo personalizzati.
Quando il tipo dati di una proprietà è una enumerazione, nella finestra Proprietà di un ambiente di sviluppo come Microsoft Visual Studio la proprietà verrà visualizzata in un elenco a discesa. Se il tipo dati di una proprietà è una classe a sua volta dotata di proprietà, queste ultime si diranno sottoproprietà della proprietà che le definisce. Nella finestra Proprietà di Visual Studio l'utente può espandere una proprietà per visualizzarne le sottoproprietà.
È importante aggiungere alle proprietà attributi che ne consentano la corretta visualizzazione nel visualizzatore proprietà in fase di progettazione. Per informazioni dettagliate, vedere Attributi per componenti in fase di progettazione.
È opportuno che i componenti espongano proprietà, e non campi pubblici, perché le proprietà consentono la gestione delle versioni e l'occultamento dei dati e prevedono l'utilizzo dei metodi di accesso, che possono eseguire logiche aggiuntive. Grazie alle ottimizzazioni JIT, le proprietà comportano oneri paragonabili a quelli dei campi.