In un articolo precedente (C# è un linguaggio orientato alle classi che descrivono oggetti ) abbiamo parlato di come sia possibile richiamare una variabile o un metodo da una classe ereditata oppure facente parte dello stesso namespace. Questo è sempre vero se indichiamo esplicitamente che essi siano pubblici , ovvero se indichiamo nella dichiarazione della variabile il livello di accesso public, altrimenti in C# il compilatore presume che il livello di accesso sia private, privato. Questa struttura dei livelli di accesso mette sulle classe una sorta di velo che le protegge e sta a noi dire esplicitamente quando alzare o meno il velo (ciò oltre a rendere più sicuro il codice fa risparmiare qualcosina in termini di performance).

Es.

public int a = 15

dichiariamo una variabile a di tipo intero che inizializziamo con il valore 15 e diciamo che può essere richiamata e modificata al di fuori della classe originale.

 

Ciò appena scritto con una variabile funziona, ma non è lo stato dell’arte in programmazione in quanto ci potrebbe esporre a possibili problemi futuri di malfunzionamento del codice nel caso che la variabile venisse modificata in un seconda classe, senza magari dei controlli preliminari necessari previsti nella classe originaria. Rendere publici metodi, invece, non presenta controindicazioni.

 

Per ovviare al problema ci vengono incontro le properties, ovvero delle variabili fantasma che possiamo rendere pubbliche e che vanno ad imitare le variabili vere e proprie che rimangono, invece, private.

Public int _a

{ get{ return a;}

set { (if value > 0 && value <100)

a = _a ;}

}



 

abbiamo quindi scritto una properties che imita la variabile a, che è pubblica e che ha due metodi, il metodo get che rende leggibile dall’esterno il valore di a (basterà richiamare _a che è pubblica che andrà a leggere il valore di a privata) ed un metodo set che invece permetterà di modificare dall’esterno il valore di a ma solo dopo un controllo (nel nostro esempio abbiamo chiesto che sia un numero intero positivo da 1 a 99).

 

E’ possibile scegliere un livello di accesso intermedio che nasconda lo stato interno di una classe all’esterno della classe ma che lo renda disponibile unicamente alle classi derivate dalla classe madre, ciò si indica con la parola protected

Esempio.

protected int a = 15;

in questo modo abbiamo dichiarato una variabile di nome a che rappresenta un numero intero, inizializzata con il valore 15 e che può essere letta e modificata da una classe figlia.

 

In una classe figlia si può dichiarare una variabile o un metodo con lo stesso nome di uno presente nella classe madre, in questo caso il compilatore di default fa riferimento a quella dichiarata nella classe figlia. Qualora si dovessero distinguere le due variabili con lo stesso nome, si può scrivendo this.nomeVariabile per indicare la variabile della classe figlia e base.nomeVariabile per indicare quella della classe madre.

Per creare un metodo in una classe ereditata con lo stesso nome di un metodo presente sulla classe madre è necessario indicare con la parola new che si va a sovrascrivere per quella classe il metodo che era presente sulla classe madre, nel caso fosse necessario richiamare il metodo della classe madre basta scrivere base.MetodoRichiesto().