l'ereditarietà tra le classi di indica con il segno
:
sintassi: creazione classe derivata
	
modificatore_accesso class NOME_CLASSE_DERIVATA : NOME_CLASSE_BASE
	
{
	
....;
	
}
la classe derivata avrà ereditato:
	- ciò che nella classe base è stato definito come public, protected o internal
		- variabile
- metodo
- proprietà
	
	- non eredita il costruttore che dovrà essere implementato con la parola basemodificatore_accesso NOME_CLASSE_DERIVATA (parametri) : base(parametri costruttore classe base)
esempio: classe base Persona → classe derivata Studente
	
costruzione
		public class Persona classe base
		
{
		string mNome; variabile non visibile dalla derivata perché private
		
protected string mCognome; variabile visibile dalla derivata perché protected
		
		
public Persona(string Nome, string Cognome) costruttore base
		
{
		mNome = Nome;
		
mCognome = Cognome;
		
}
		
		
public string Nome proprietà classe base perché Nome é private
		
{
		get { return mNome; }
		
set { mNome = value; }
		
}
		
		
...;
		
}
		
		
public class Studente : Persona classe derivata
		
{
		private int mMatricola;
		
		
public Studente(string Nome, string Cognome, int Matricola) : base(Nome, Cognome) costruttore derivato
		
si può in caso di necessità imporre una variabile dei parametri della classe base costante, 
		
ex: : base("Pippo", Cognome) → Nome = "Pippo" per tutti gli studenti
		
{
		mMatricola = Matricola;
		
}
		
		
public int Matricola proprietà derivata (+ quella base ereditata)
		
{
		get { return mMatricola; }
		
set { mMatricola = value; }
		
}
		
}
		
		
	dichiarazione
		Studente stud = new Studente("Marco", "", 0);  creo oggetto Studente
		
stud.Matricola = 232440; Corretto: Matricola è una proprietà della classe Studente
		
stud.Cognome = "Minerva"; Corretto: Cognome è una proprietà ereditata da Persona
		
		
Persona pers = new Persona("Marco", "");  creo oggetto Persona
		
pers.Cognome = "Minerva";  Corretto: Cognome è una proprietà della classe Persona
		
pers.Matricola = 232440;  Errato: la proprietà Matricola non è visibile da Persona
conseguenze e caratteristiche:
	- dove è previsto l'uso di una certa classe è quasi sempre possibile utilizzare una sua classe derivata
		- se un metodo richiede come parametri determinati oggetti, sarà possibile passare oggetti derivati
esempio: a un metodo che confronta la variabile Nome di due oggetti persona Persona é possibile passare anche un oggetto Studente, in quanto Studente é una persona Persona
			
public static bool NomiUguali(Persona p1, Persona p2) metodo che chiede due oggetti Persona
			
{
			
return (p1.Nome == p2.Nome); funzione che ritorna true se le variabili Nome dei due oggetti sono uguali
			
}
			
			
Persona pers = new Persona("Marco", "Rossi"); oggetto Persona
			
Studente stud = new Studente("Marco", "Minerva", 232440); oggetto Studente che deriva da Persona
			
Console.WriteLine(NomiUguali(pers, stud));  richiama il metodo e visualizza il risultato passando i due oggetti Persona e derivato di Persona
		
		all'interno della routine NomiUguali la variabile stud viene vista come una Persona, e, quindi, di stud sono visibili i metodi e le proprietà pubbliche della classe Persona, non quelli di Studente.
	
	- l'ereditarietà è singolauna classe può avere solo una classe base, a differenza del C++, non è possibile definire una classe C che eredita contemporaneamente da A e da B