2012-04-15 14 views
6

Attualmente sto studiando per il mio esame MS 70-515. In una delle pratiche l'autore implementa un'interfaccia sia implicita che esplicita. L'implementazione esplicita chiama solo l'implementazione implicita. L'implementazione esplicita è appena elencata senza una spiegazione.L'interfaccia di implementazione sia implicita che esplicita ha senso?

Ha senso avere un'implementazione implicita e esplicita dell'interfaccia? Penserei che l'implementazione esplicita sia ridondante (in questo caso).

public class PassTextBox : TextBox, IScriptControl 
{ 
    public virtual IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
    { 
     var descriptor = new ScriptControlDescriptor(
      "AjaxEnabled.PassTextBox", ClientID); 
     // ... 
     return new ScriptDescriptor[] {descriptor}; 
    } 

    IEnumerable<ScriptDescriptor> IScriptControl.GetScriptDescriptors() 
    { 
     return GetScriptDescriptors(); 
    } 
} 

BTW, il codice sembra funzionare bene senza l'implementazione esplicita, come l'implementazione implicita è pubblico.

Riguarda MCTS Self-Paced Training Kit (Exam 70-515): Web Applications Development with Microsoft .NET Framework 4 Capitolo 9, Lezione 2, Pratica 3 per la precisione.

+0

possibile duplicato di [Implementazione implicita ed esplicita dell'interfaccia] (http://stackoverflow.com/questions/2756520/implicit-and-explicit-implementation-of-interface) –

+2

Questi esami hanno sempre un'errata lunga un miglio . Puoi inviare il tuo: http://oreilly.com/catalog/errata.csp?isbn=9780735627406 –

risposta

10

L'implementazione esplicita sembra del tutto superflua.

Non riesco a pensare a un modo per chiamarlo dove farebbe la differenza se lo avessi lasciato fuori.

C'è una piccola differenza, la versione implicita è virtuale il che significa che potrebbe essere sovrascritta. La versione esplicita verrà sempre chiamata in questo punto di ingresso. Ma dal momento che chiama solo il membro virtuale, questa differenza non viene utilizzata qui.

+0

Marc Gravell [dice] (http://stackoverflow.com/a/2756728/537956) un motivo per implementare entrambi potrebbe be _ il metodo non esplicito è 'virtuale' o' astratto', per le sottoclassi a 'override'_. Nel mio esempio è effettivamente 'virtuale', ma non vedo perché sarebbe una ragione per implementare anche l'interfaccia esplicita. Chiederò a Marc cosa intende commentare commentando la sua risposta. – comecme

+0

Potresti avere 2 implementazioni completamente diverse. Ma che sia desiderabile? E quando lo si sfrutta, sarebbe più logico mettere l'implementazione in chiaro e fare in modo che il metodo virtuale lo chiamasse. –

+0

+1. È davvero del tutto superfluo. –

Problemi correlati