Guadagna online

Fidelityhouse.eu

venerdì 10 febbraio 2012

C# - 3° Lezione

Nella scorsa lezione abbiamo trattato il concetto di classe; precisamente abbiamo trattato il concetto di classe, i tipi di dati e i metodi. In questa lezione continueremo a vedere le varie caratteristiche principali di una classe.

Le proprietà
Una classe può contenere anche un altro tipo di metodi, le cosiddette proprietà. Si tratta di particolari routine che permettano di leggere e/o impostare i valori di determinate proprietà di una classe. Aggiungiamo, per esempio, la seguente proprietà alla classe Persona:

{codecitation class="brush: c#; gutter: false;"}

public string Nome
{
get { return nome; }
set { nome = value; }
}

{/codecitation}
Essa permette di avere accesso in lettura/scrittura alla variabile nome, che altrimenti non sarebbe visibile all'esterno della classe. Il blocco get deve restituire la variabile associata alla proprietà, quindi, come detto nella precedente lezione, deve contenere l'istruzione return.
Il codice del blocco set, invece, viene eseguito quando si modifica il valore della proprietà; la parola chiave value contiene il nuovo valore da assegnare. L'utilizzo delle proprietà è abbastanza semplice:

{codecitation class="brush: c#; gutter: false;"}

Persona p = new Persona("Mario", "Rossi");

//Stampa "Mario" (richiama il blocco get)
Console.WriteLine(p.Nome);

//Imposta il nome a "Andrea" (richiama il blocco set)
p.Nome = "Andrea";

{/codecitation}
Allo stesso modo è possibile aggiungere altre proprietà, come cognome, indirizzo ect. Basta definirle nella classe Persona.
A prima vista può sembrare che le proprietà svolgono lo stessa funzione di una variabile impostata a public, in realtà è ben diverso. Nello sviluppo di un software, conviene avere una classe con membri privati accessibili solo tramite proprietà quando si devono effettuare dei controlli sui valori assegnati ai membri stessi.
Ad esempio, supponiamo di voler impedire che l'utente inserisca un nome o un cognome vuoto: se impostiamo le variabili nome e cognome come pubbliche questo controllo non può essere effettuato.
Infatti si ha libero accesso alle variabili che possono essere impostate su qualunque stringa valida, compresa la stringa vuota (String.Empty, che è un campo a sola lettura che rappresenta la stringa vuota). Per risolvere il problema, è sufficiente definire i membri come privati e modificare la proprietà Nome nel modo seguente:
{codecitation class="brush: c#; gutter: false;"}
public string Nome
{
  get { return nome; }
  set
  {
    if (value == string.Empty)
      nome = "(Nessun nome)";
    else
      nome = value;
  }
}
{/codecitation}
È buona norma definire delle proprietà che consentano di modificare i valori delle variabili utilizzate da una classe, in modo da avere un maggior controllo sui dati specificati, piuttosto che dare libero accesso alle variabili stesse.
Le proprietà possono anche essere di sola lettura, se dispongono del solo blocco get, oppure di sola scrittura, se hanno solo il codice associato al set.
Per ottenere un comportamento analogo in Java oppure in C++, è necessario definire due metodi distinti, i cosiddetti metodi getter (per recuperare il valore) e setter (per impostarlo).

0 commenti:

Posta un commento

adf.ly 2.3g