Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le proprietà offrono la comodità dei membri dati pubblici senza i rischi che comportano l'accesso non protetto, non controllato e non verificato ai dati di un oggetto. Le proprietà dichiarano le funzioni di accesso: metodi speciali che assegnano e recuperano valori dal membro dati sottostante. La funzione di accesso set consente l'assegnazione dei membri dati e la funzione di accesso get recupera i valori dei membri dati.
Questo esempio mostra una classe Person
con due proprietà: Name
(stringa) e Age
(int). Entrambe le proprietà forniscono get
e set
funzioni di accesso, quindi sono considerate proprietà di lettura/scrittura.
Esempio
class Person
{
private string _name = "N/A";
private int _age = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return _age;
}
set
{
_age = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
}
public class Wrapper
{
private string _name = "N/A";
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
}
class TestPerson
{
static void Main()
{
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine($"Person details - {person}");
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine($"Person details - {person}");
// Increment the Age property:
person.Age += 1;
Console.WriteLine($"Person details - {person}");
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
Programmazione affidabile
Nell'esempio precedente le Name
proprietà e Age
sono pubbliche e includono sia una get
funzione di accesso che una set
funzione di accesso. Le funzioni di accesso pubbliche consentono a qualsiasi oggetto di leggere e scrivere queste proprietà. A volte è tuttavia consigliabile escludere una delle funzioni di accesso. È possibile omettere la funzione di accesso set
per rendere la proprietà di sola lettura:
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
In alternativa, è possibile rendere pubblico un accessore, ma rendere l'altro privato o protetto. Per altre informazioni, vedere Accessibilità delle funzioni di accesso asimmetriche.
Una volta dichiarate le proprietà, possono essere usate come campi della classe. Le proprietà consentono una sintassi naturale quando si ottiene e si imposta il valore di una proprietà, come nelle istruzioni seguenti:
person.Name = "Joe";
person.Age = 99;
In un metodo di proprietà set
è disponibile una variabile speciale value
. Questa variabile contiene il valore specificato dall'utente, ad esempio:
_name = value;
Si noti la sintassi pulita per incrementare la proprietà Age
di un oggetto Person
:
person.Age += 1;
Se sono stati usati metodi separati set
e get
per modellare le proprietà, il codice equivalente potrebbe apparire in questo modo:
person.SetAge(person.GetAge() + 1);
Il ToString
metodo viene sottoposto a override in questo esempio:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Si noti che ToString
non viene usato in modo esplicito nel programma. Viene richiamato per impostazione predefinita dalle WriteLine
chiamate.