Nello scorso articolo abbiamo introdotto il concetto di classe in C# che è alla base della programmazione ad oggetti ed abbiamo anche fatto un esempio di implementazione della classe CPersona richiamata dalla funzione principale del programma. Classi particolarmente lunghe possono essere spezzate in più file di testo. Queste classi sono implementate con il modificatore partial, sta al compilatore successivamente riassemblare tutti i pezzi di una classe, ovviamente due o più pezzi della stessa classe devono avere lo stesso nome con il modificatore partial ed appartenere allo stesso assembly. Abbiamo visto la scorsa volta che per istanziare le classi occorre utilizzare l’operatore new, questo svolge diversi compiti: carica in memoria la struttura della classe e si occupa di allocare la memoria dinamica ( heap ricordate? ) per contenere le proprietà ( variabili ) e metodi ( funzioni ) della classe. Al momento della creazione però le proprietà sono state inserite, ma non inizializzate e per farlo occorreva richiamarle per dargli un valore, abbiamo per questo inserito public davanti ad ognuna. Se dovessimo impostarle private o protected, come deve essere, non potrei più accedervi dall’esterno alla classe. Provate a cambiare public in private e ve ne accorgerete avendo un errore. Si usa per questo motivo il costruttore della classe che deve avere lo stesso nome, ecco un esempio:
using System; public class CPersona { private string m_sNome; private string m_sCognome; public CPersona(string sNome, string sCognome) { m_sNome = sNome; m_sCognome = sCognome; } public void Stampa() { Console.WriteLine(m_sNome + " " + m_sCognome); } } public class Corso { static void Main(string[] args) { CPersona pers = new CPersona("Giampaolo", "Rossi"); pers.Stampa(); Console.ReadKey(); } }
Come si vede dal codice di esempio il nome ed il cognome sono stati resi privati ed inizializzati tramite il costruttore public CPersona() … ed inoltre io ed altri programmatori utilizzano una m_ davanti al tipo della variabile per indicare che si tratta di una variabile membro della classe, quindi m_sNome è una variabile membro di una classe di tipo string. Ovviamente le funzioni membro della classe possono accedere alle variabili membro della classe anche se private. Il costruttore è una funzione ( metodo ) particolare che ha lo stesso nome della classe e non ha tipo di ritorno, viene richiamato al momento dell’istanziamento della classe con new. Come esiste il costruttore esiste anche il distruttore, che ha la stessa sintassi del primo, ma preceduto dalla tilde public ~CPersona() … In realtà il distruttore in C# ha molto meno importanza che in linguaggi come il C/C++ perché possiede il garbage collector ( raccolta dei rifiuti ) come il java, ecco come funziona. Ogni volta che la memoria RAM viene istanziata per accogliere una variabile o metodo o classe o altro, deve venir liberata quando il programma o la routine è terminata ed in C# questo processo è stato reso automatizzato e quindi non potete avere i classici memory leak del C/C++.
<< Lezione Precedente – Inizio Corso – Indice Lezioni – Lezione Successiva >>