Stefan Ghinea.it | English versionEnglish version | e-mail

  • Cerca nel sito
   myway con Google:
   
   Web Ghinea.it
   
  • Socialnetwork
Web Agency Prato:
Creazione Siti, Indicizzazione, Ottimizzazione
 
  facebook  twitter  youtube 
 
  • ContattamiSkype
Web Agency Prato:
richiesta informazioni
 
My status
Contattami

Lezione C# – Le proprietà

Nelle classi di esempio utilizzate nella precedente lezione, abbiamo utilizzato dei campi istanza (variabili della classe) che avevano il modificatore di accesso public con il quale il codice esterno alla classe poteva accedere direttamente ai loro valori.

Nella normale programmazione orientata agli oggetti, è consigliabile garantire una maggiore “ristrettezza” riguardo l’accesso ai campi istanza della classe. Con ristrettezza si intende cioè “mascherare” la natura e la struttura dei campi inclusi nella classe. L’utilizzatore della classe non deve interessarsi di come sono stati creati e/o manipolati i campi istanza dell’oggetto che dovrà gestire all’interno di una applicazione, ma li dovrà solamente utilizzare. I progettisti di una classe, nascondono, rendendoli privati, tutti (o quasi) i campi istanza di una classe.

La domanda nasce spontanea: “Se i campi vengono dichiarati privati (private), come si possono utilizzare all’interno di una applicazione se non possiamo accedervi?”
Il C# mette a disposizione un costrutto particolare creato ad hoc per poter accedere indirettamente ai campi istanza di una classe: le proprietà. Con le proprietà, siamo in grado di accedere ai campi istanza sia in lettura che in scrittura; questa è la sintassi:


public tipo nome_proprietà
{
get
{
return nome_campo;
}
set
{
nome_campo=value;
}
}

La segnatura indica che la proprietà è public, quindi accessibile dal codice esterno alla classe, è dichiarata di un tipo tra quelli consentiti dal linguaggio e che è in stretta relazione con quello del campo istanza a cui farà riferimento ed infine ha un nome.

Le parole chiave get e set consentono l’effettivo accesso al campo istanza ed in particolare con get saremo in grado di leggere il contenuto del campo. Nel suo blocco di codice noterete la parola chiave return. Essa ci ritorna il valore del campo nome_campo (tra breve vedremo come). Mentre con set saremo in grado di assegnare un preciso valore al campo nome_campo tramite la parola chiave value. Come al solito la teoria deve necessariamente lasciare spazio alla pratica che svelerà molto semplicemente i “retroscena” dell’uso delle proprietà.

Riprendiamo la classe Studente della lezione precedente e che qui riporto:


class Studente
{
// campi istanza della classe
public string nome;
public string cognome;
}

ora la trasformeremo aggiungendovi due proprietà.

Per prima cosa eliminiamo il modificatore public rendendo entrambi i campi privati. Vi ricordo che se ad un campo non diamo nessun modificatore di accesso, il campo diventa automaticamente private. Ora la classe si presenta così:


class Studente
{
// campi istanza privati della classe
string nome;
string cognome;
}

Inseriamo le proprietà relative ai campi:


class Studente
{
// campi istanza privati della classe
string nome;
string cognome;
// definisco la proprietà per il campo nome
public string st_nome // è dello stesso tipo del campo istanza
{
get // per la lettura
{
return nome; // ritorna il valore stringa del campo
}
set // per l’assegnazione
{
nome=value; // assegno un valore stringa al campo
}
}
// definisco la proprietà per il campo cognome
public string st_cognome // è dello stesso tipo del campo istanza
{
get // per la lettura
{
return cognome; // ritorna il valore stringa del campo
}
set // per l’assegnazione
{
cognome=value; // assegno un valore stringa al campo
}
}
} // fine blocco di codice della classe

La classe è terminata ed è pronta all’uso. Ma ora che i campi istanza sono “spariti”, in che modo le proprietà verranno utilizzate nel codice ?

Le proprietà, come avete imparato, hanno un nome ed è proprio tramite il nome che accederemo ai campi. Le proprietà possono essere considerate come semplici variabili e come tali verranno usate nel codice. Normalmente quando assegniamo un valore ad una variabile siamo soliti scrivere, per esempio: numero=124;oppure se vogliamo leggerne il contenuto scriviamo:num_libri=numero; con le proprietà faremo la stessa cosa ma con la variante che, avendo a che fare con un oggetto, dobbiamo utilizzare la notazione puntata (operatore punto); per esempio se abbiamo istanziato un oggetto Alunno tramite la classe Studente e vogliamo assegnargli un nome ed un cognome faremo così:


// per il nome
Alunno.st_nome=”Valentino”;
// per il cognome
Alunno.st_cognome=”Rossi”;

queste due istruzioni, hanno effettuato una assegnazione di un valore per i campi privati della classe richiamando automaticamente il costrutto set attraverso le rispettive proprietà (st_nome e st_cognome). Al contrario, se vogliamo leggere i valori contenuti nei campi privati della classe faremo cosi, per esempio:


// per il nome
Console.WriteLine(Alunno.st_nome);
// per il cognome
Console.WriteLine(Alunno.st_cognome);

le istruzioni richiamano automaticamente il costrutto get delle rispettive proprietà che ci ritonerà il valore del campo privato associato tramite la parola chiave return.
E’ arrivato il momento di vedere in azione la nuova classe con questo semplice programmino. Copiate il listato, compilatelo e lanciatelo.


// questo programma usa la classe Studente modificata
using System;
class Studente
{
// campi istanza privati della classe
string nome;
string cognome;
// definisco la proprietà per il campo nome
public string st_nome // è dello stesso tipo del campo istanza
{
get // per la lettura
{
return nome; // ritorna il valore stringa del campo
}
set // per l’assegnazione
{
nome=value; // assegno un valore stringa al campo
}
// definisco la proprietà per il campo cognome
public string st_cognome // è dello stesso tipo del campo istanza { get // per la lettura { return cognome; // ritorna il valore stringa del campo } set // per l’assegnazione { cognome=value; // assegno un valore stringa al campo } }
} // fine blocco di codice della classe class Alunno2
// il programma
{ public static void Main() {
// istanzio la classe Studente Alunno = new Studente();
// valorizzo le proprietà dell’oggetto Alunno.st_nome = “Valentino”; Alunno.st_cognome = “Rossi”;
// stampo i valori dei campi Console.WriteLine(“\nIl nome dell’alunno è {0} {1}”, Alunno.st_nome , Alunno.st_cognome);
// attendo un carattere qualsiasi // digitato per chiudere il programma Console.ReadLine();
} // chiude il Main() } // chiude il programma

   09/10/2010 17:24:54 pm
  • No Related Post
No Comments »

    Lascia un commento

Spam protection by WP Captcha-Free

  • I bannerGhinea.it
minibanner1
minibanner2
minibanner3
minibanner4
  • Sidebar
  • Categories:
  • Abbiamo lanciato a gennaio 2012 un nuovo sito WordPress: tmptecnorestauri.it
    Abbiamo lanciato alla fine di novembre 2011 un nuovo sito WordPress: infortunisticabologna.net
    Un sito amatoriale: www.sorrisodiluna.too.it
    Giochi online: www.mostfun.com
    Sempre classico: www.gianlucabianchi.it
    I siti web della settimana
    WordPress inarrestabile
    La PEC… vola
    Google nemico della memoria?
    Anonymous: nemici pubblici numero uno







    Stefan Ghinea - Consulenze informatiche e soluzioni software
    Via Marchini, 26 - 59100 Prato (PO) - Tel.: 340 2123560; Fax: 0574 027820  E-mail Home page
    © 2010 by GhineaWebSolutions.it