Implementazione esplicita di membri di interfaccia

L'implementazione esplicita di una interfaccia presenta caratteristiche significative rispetto ad una implementazione per così dire non esplicita. Ad esempio, si consideri l'interfaccia:

public

interface IExplicitImplementation 

{ string Method1(string par); }

e la seguente classe che la implementa in modo esplicito:

public class Class1 : IExplicitImplementation  {

string IExplicitImplementation.Method1(string par) {

             return "Hello world " + par;

}

}

Le caratteristiche salienti sono:

- Il client che consuma la classe Class1 utilizzando una istanza di quest'ultima è impossibilitato a richiamare il metodo Method1 in quanto quest'ultimo NON fa parte dell'interfaccia pubblica della classe (non è visibile con l'intellisense ed il tentativo di richiamare comunque il metodo genera un errore di compilazione).

Questo codice genera un errore di compilazione:

Class1

cl1 = new Class1();

cl1.Method1();

- Il client che consuma la classe Class1 può invocare il metodo Method1 solo attraverso una istanza dell'interfaccia IExplicitImplementation che la classe stessa implementa esplicitamente. Vale a dire:

IExplicitImplementation i = new Class1();

Console.WriteLine( i.Method1("Maurizio"));

Quindi un metodo che implementa esplicitamente una interfaccia è, per così dire, privato e pubblico nello stesso tempo. E' privato perchè non compare nell'interfaccia pubblica della classe e non può essere richiamato attraverso una  istanza della classe stessa; è pubblico perchè può comunque essere richiamato utilizzando una istanza dell'interfaccia.

- Un metodo che implementa esplicitamente un membro di una interfaccia non può contenere alcun modificatore di accesso, nè i modificatori static, abstract, override e virtual. L'ultima caratteristica determina anche l'impossibilità di effettuare l'override di una implementazione esplicita di un membro di una interfaccia. Questo ostacolo è comunque raggirabile dichiarando un altro metodo virtuale (e quindi ridefinibile) e richiamando quest'ultimo metodo nel codice che implementa esplicitamente un membro di una interfaccia.

Print | posted on Thursday, October 25, 2007 6:13 AM

Comments on this post

No comments posted yet.

Your comment:

 (will show your gravatar)
 
Please add 8 and 1 and type the answer here: