17

Feb

C# tips and tricks: Implementazione esplicita di una interfaccia

Ciao  a tutti,

 

continuiamo la serie di post (link al primo post) dedicata al linguaggio C#. Oggi vediamo com’è possibile implementare una interfaccia in maniera esplicita. Questo ci consente di non poter richiamare subito i metodi esposti dall’interfaccia su una istanza di una classe che la implementa, ma dobbiamo prima castare l’istanza e poi richiamare il metodo.

Partiamo subito un esempio, supponiamo di avere una interfaccia A in questo modo:

   1: public interface InterfaceA
   2: {
   3:     void Metodo();
   4: }

e una classe “ClasseA” che implementa questa interfaccia:

   1: public class ClasseA : InterfaceA
   2: {
   3:     public void Metodo(){
   5:     }
   6: }

Per accedere ora al metodo ci basta istanziare un oggetto di tipo ClasseA e chiamare il metodo “Metodo”. Fin qui tutto normale, quando invece vogliamo implementare la nostra interfaccia in maniera esplicita dobbiamo usare le seguente sinstassi:

   1: public class ClasseA
   2: {
   3:     void InterfaceA.Metodo()
   4:         {
   5:         
   6:         }
   7: }

quindi togliendo la parola chiave public e specificando il nome dell’interfaccia prima del metodo da chiamare ed il gioco è fatto Sorriso. In questo modo non è più possibile accedere al metodo direttamente ma dobbiamo castare l’istanza dell’oggetto della ClasseA nell’interfaccia e poi richiamare il metodo

   1: ClasseA cls = new ClasseA();
   2: ((InterfaceA)cls).Metodo();

Anche .NET fa uso di questo sistema, un esempio è la classe DbContext. Questa classe implementa l’interfaccia IObjectContextAdapter che ha al suo interno una proprietà di tipo ObjectContext. Per poter accedere a questa proprietà dovete per forza fare

   1: var adpContext = ((IObjectContextAdapter)ctx).ObjectContext;

Naturalmente dichiarare dei metodi in una interfaccia per poi non renderli subito accessibili è una cosa un po' contro natura e se possibile da evitare, però ci sono scenari particolari come per esempio se abbiamo due interfacce che implementano la stessa firma dobbiamo per forza usare questa soluzione.

Qui potete scaricare il progetto di esempio, che mostra anche  un esempio con due interfacce.

Ancora una volta C# si dimostra un linguaggio molto flessibile e pieno di sorprese Sorriso.

 

Grazie a tutti e alla prossima

 

Carmine

by Carmine Punella on 2/17/2014
Post archive