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:
ExplicitImplementation 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.