I concetti che riguardano le classi del C# nascono da altri linguaggi di programmazione e ne riprendono la logica, mentre altri costrutti particolari sono stati studiati per aiutare i programmatori.
In passato i programmatori Windows utilizzavano delle librerie ( DLL ) per distribuire le funzioni dei loro programmi, c’erano due tipi di collegamento per poter esportare questi metodi, statico e dinamico. Questo tipo di programmazione portava però a dei problemi di portabilità e discrepanza, infatti programmi e librerie di versioni differenti non potevano funzionare. Con l’avvento del .NET si sono eliminate le librerie statiche ed è stato fatto in modo che quelle dinamiche fossero autodescrittive. In questo modo le DLL vengono utilizzate sia a runtime che in fase di compilazione e linking. Queste DLL comprendono classi e componenti che sono state denominate assembly.
Nella programmazione ad oggetti un metodo può avere visibilità come privato, protetto e pubblico, con il C# esiste anche un altro costrutto: internal. Con questo costrutto particolare il metodo rimane pubblico all’interno dell’assembly in cui viene creato e privato se utilizzato da altri assembly.
All’interno di una classe è possibile dichiarare un attributo come static, il compilatore in questo caso crea una sola istanza di tale variabile che sarà comune a tutte le istanze della classe. In questo modo è possibile rendere persistenti gli oggetti, vediamo un semplice esempio che conta il numero delle volte che un oggetto viene istanziato.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestCons { class Test { static int nCounter = 0; public Test() { nCounter++; System.Console.WriteLine ("Numero di istanze: " + nCounter); } } class Program { static void Main(string[] args) { Test test1 = new Test(); Test test2 = new Test(); Test test3 = new Test(); } } }
Può anche nascere l’esigenza di creare una variabile una sola volta all’interno del programma e renderla non modificabile durante tutta la sessione di lavoro. In C# abbiamo un costrutto particolare che consente di fare tutto questo, si tratta di dichiarare readonly la variabile d’istanza che intendiamo utilizzare per tale scopo.
Un altro tipo di variabile è quella di tipo const, in questo caso abbiamo un comportamento simile a readonly, l’unica differenza è che non è possibile attribuire un valore alla variabile const a runtime, tale valore deve essere noto già al momento della compilazione. Un’altra caratteristica delle variabili const è che queste sono attive in memoria già prima che venga creata l’istanza della classe che la contiene.
In questo articolo abbiamo visto alcuni costrutti particolari utilizzati all’interno delle classi in C#, questi dovrebbero permettere di approfondire meglio il modo nel quale sono stati sviluppati i componenti che fanno parte dell’ambiente .NET e per questo poter sviluppare al meglio anche i nostri lavori.