Posted on 16 Novembre 2007 by fgargiulo
Le interfacce descrivono un gruppo di comportamenti correlati che possono appartenere a qualsiasi class o struttura. Possono essere costituite da metodi, proprietà, eventi, indicizzatori o qualsiasi combinazione di questi quattro tipi di membro. Un’interfaccia non può contenere campi. I membri delle interfacce sono automaticamente pubblici.
Le classi e le strutture possono ereditare dalle interfacce, così come le classi possono ereditare una classe base o una struttura, con due eccezioni:
- Una classe o una struttura può ereditare da più interfacce.
- Quando una classe o una struttura eredita un’interfaccia, eredita solo i nomi e le firme dei metodi perché l’interfaccia stessa non contiene implementazioni.
Di seguito sono riportate le caratteristiche principali di un’interfaccia:
- Un’interfaccia è simile a una classe base astratta: qualsiasi tipo non astratto che eredita l’interfaccia deve implementarne tutti i relativi membri.
- Non è possibile creare direttamente istanze di un’interfaccia.
- Le interfacce possono contenere eventi, indicizzatori, metodi e proprietà.
- Le interfacce non contengono implementazioni di metodi.
- Le classi e le strutture possono ereditare da più interfacce.
- Un’interfaccia può a sua volta ereditare da più interfacce.
Esempio.
public interface IMyClass
{
void Metodo();
}
public class MyClass : IMyClass
{
public void Metodo();
}
Postato in: Framework .NET, Linguaggio C# (c sharp) | Messo il tag: classe, ereditarietà, interface | Lascia un commento
Posted on 16 Novembre 2007 by fgargiulo
Mediante l’ereditarietà, una classe può essere utilizzata come diversi tipi, ossia il tipo specifico della classe, qualsiasi tipo base o qualsiasi tipo interfaccia, se vengono implementate interfacce. Questa caratteristica è nota come polimorfismo. In C# tutti i tipi sono polimorfici. Possono infatti essere utilizzati come tipo specifico o come istanza di Object, poiché qualsiasi tipo considera automaticamente Object come tipo base.
Il polimorfismo è importante non solo per le classi derivate ma anche per le classi base. Quando si utilizza la classe base, è possibile che in realtà si stia utilizzando un oggetto della classe derivata di cui è stato eseguito il cast nel tipo della classe base. I progettisti di una classe base possono prevedere gli aspetti della classe che potrebbero cambiare per un tipo derivato.
Affinché un’istanza di una classe derivata acquisisca completamente un membro di una classe base, è necessario che nella classe base tale membro sia dichiarato come virtuale. A tale scopo è necessario aggiungere la parola chiave virtual prima del tipo restituito del membro. In una classe derivata può quindi essere utilizzata la parola chiave override, anziché new, per sostituire l’implementazione della classe base con quella della classe derivata.
public class ClasseBase
{
public virtual void MetodoUno() { }
public virtual int ProprietaUno
{
get { return 0; }
}
}
public class ClasseDerivata : ClasseBase
{
public override void MetodoUno() { }
public override int ProprietaUno
{
get { return 0; }
}
}
Postato in: Linguaggio C# (c sharp), Paradigmi di Programmazione | Messo il tag: classe, classe base, derivazione, override, virtual | Lascia un commento
Posted on 16 Novembre 2007 by fgargiulo
Le classi possono ereditare da altre classi. L’ereditarietà viene definita nella dichiarazione della classe, inserendo due punti dopo il nome della classe e specificando quindi il nome della classe da cui ereditare, ovvero la classe base.
Esempio.
public class A
{
public A() { }
}
public class B : A
{
public B() { }
}
La nuova classe, ovvero la classe derivata, ottiene in tal modo tutti i dati non privati e il comportamento della classe base, oltre a qualsiasi altro dato o comportamento definito per se stessa. La nuova classe dispone quindi di due tipi effettivi: il tipo della nuova classe e il tipo della classe ereditato. L’operazione di cast non implica la modifica dell’oggetto B, ma limita semplicemente la visualizzazione dell’oggetto B ai dati e ai comportamenti dell’oggetto A. Dopo aver eseguito il cast di un oggetto B in un oggetto A, è possibile eseguire il cast dell’oggetto A per convertirlo di nuovo in B. Non è possibile convertire nell’oggetto B tutte le istanze dell’oggetto A, ma solo quelle che sono effettivamente istanze di B. Se si accede alla classe B come tipo B, si otterranno i dati e i comportamenti sia della classe A che della classe B. La possibilità di rappresentare più tipi in un oggetto è nota come polimorfismo.
Postato in: Linguaggio C# (c sharp), Paradigmi di Programmazione | Messo il tag: derivazione, ereditarietà | Lascia un commento