Guadagna online

Fidelityhouse.eu

venerdì 10 febbraio 2012

C# - 6° Lezione

L'ereditarietà è un concetto base della programmazione orientata agli oggetti. Si definisce ereditarietà la possibilità per una classe (detta classe derivata) di ereditare da un'altra (la classe principale o padre) le variabili, i metodi, le proprietà e di estendere il concetto della classe base e specializzarlo.

Tutte le classi del Framework .NET ereditano implicitamente dalla classe base Object. In C# la relazione di ereditarietà tra le classi si esprime usando i due punti (:).
Riprendiamo la nostra classe Persona
{codecitation class="brush: c#; gutter: false;"}
public class Persona
{
string nome;
protected string cognome;
public Persona(string Nome, string Cognome)
{
nome = Nome;
cognome= Cognome;
}
public string Nome
{
get { return nome; } set { nome= value; }
}
//...ect
}
{/codecitation}
Osserviamo che la variabile cognome è stata dichiarata come protected. Vogliamo ora definire un nuovo oggetto, quello di Studente, ovvero una Persona dotata di un numero di matricola. Per fare questo, Studente deve ereditare da Persona (si può dire anche che Studente estende Persona):
{codecitation class="brush: c#; gutter: false;"}
public class Studente : Persona
{
private int matricola;
public Studente(string Nome, string Cognome, int Matricola)
: base(Nome, Cognome)
{
matricola = Matricola;
}
public int Matricola
{
get { return matricola; }
set { matricola= value; }
}
}
{/codecitation}
Essendo la classe Studente una classe derivata, essa può utilizzare tutto ciò che è nella classe principale, in questo caso la classe Persona. Ad esempio, all'interno di Studente è possibile utilizzare la variabile cognome, che in Persona è definita protected.
Esaminiamo il frammento di codice:
{codecitation class="brush: c#; gutter: false;"}
: base(Nome, Cognome)
{/codecitation}
Esso serve a richiamare il costruttore della classe principale passandogli gli argomenti specificati. In questo modo è possibile impostare le variabili nome e cognome della classe Persona sugli stessi valori passati al costruttore di Studente.
Se avessimo voluto che il nome della persona, indipendentemente da quanto indicato nel costruttore di Studente, fosse sempre "Paolo", mentre il cognome fosse quello passato, sarebbe stato sufficiente scrivere:
{codecitation class="brush: c#; gutter: false;"}

: base("Paolo", Cognome)

{/codecitation}
Questo costrutto è necessario perché, quando si crea un oggetto di una classe che deriva da un'altra, prima del costruttore della classe derivata viene richiamato quello della classe principale: nel nostro esempio, quando si istanzia un oggetto di tipo Studente, viene richiamato prima il costruttore della classe Persona, e, in seguito, quello di Studente.
Poiché la classe Persona non ha un costruttore senza argomenti, bisogna indicare esplicitamente tramite la parola chiave «base» quale costruttore richiamare. Se invece Persona avesse avuto un costruttore privo di argomenti, «base» non sarebbe servita.
Oltre che a questo scopo, «base» serve, in generale, per avere accesso ai metodi, alle variabili ed alle proprietà della classe che si sta derivando. Il corrispondente di «base» in Visual Basic è la parola chiave MyBase.
L'ereditarietà è singola, in C# come in VB.NET, ovvero una classe può avere solo una classe principale, a differenza del C++, che supporta l'ereditarietà multipla: in altre parole, non è possibile definire una classe C che eredita contemporaneamente da A e da B.

0 commenti:

Posta un commento

adf.ly 2.3g