2012-04-15 4 views
6

Ich lerne derzeit für meine MS 70-515 Prüfung. In einer der Praktiken implementiert der Autor eine sowohl implizite als auch explizite Schnittstelle. Die explizite Implementierung ruft nur die implizite Implementierung auf. Die explizite Implementierung wird nur ohne Erklärung aufgeführt.Ist die Implementierung der Schnittstelle sowohl implizit als auch explizit sinnvoll?

Macht es Sinn, sowohl eine implizite als auch eine explizite Implementierung der Schnittstelle zu haben? Ich würde denken, dass die explizite Implementierung überflüssig ist (in diesem Fall).

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 scheint der Code ohne die explizite Implementierung gut zu funktionieren, da die implizite Implementierung öffentlich ist.

Es handelt sich um MCTS Self-Paced Training Kit (Exam 70-515): Web Applications Development with Microsoft .NET Framework 4 Kapitel 9, Lektion 2, Praxis 3, um genau zu sein.

+0

mögliche Duplikate von [Implizite und explizite Implementierung der Schnittstelle] (http://stackoverflow.com/questions/2756520/implicit-and-explicit-implementation-of-interface) –

+2

Diese Prüfungen haben immer eine Errata, die eine Meile lang ist . Sie können Ihre eigenen einsenden: http://oreilly.com/catalog/errata.csp?isbn=9780735627406 –

Antwort

10

Die explizite Implementierung scheint völlig überflüssig zu sein.

Ich kann mir nicht vorstellen, wie man es nennen würde, wo es einen Unterschied machen würde, wenn man es auslassen würde.

Es gibt einen kleinen Unterschied, die implizite Version ist virtuell, dh sie könnte überschrieben werden. Die explizite Version wird immer an diesem Einstiegspunkt aufgerufen. Aber da es nur das virtuelle Mitglied aufruft, wird dieser Unterschied hier nicht verwendet.

+0

Marc Gravell [sagt] (http://Stackoverflow.com/a/2756728/537956) einen Grund, beides zu implementieren sei _die nicht-explizite Methode ist 'virtual' oder' abstract', für Unterklassen zu 'override'_. In meinem Beispiel ist es zwar "virtuell", aber ich sehe nicht, warum das ein Grund wäre, auch die explizite Schnittstelle zu implementieren. Ich werde Marc fragen, was er meint, indem er seine Antwort kommentiert. – comecme

+0

Sie könnten 2 völlig verschiedene Implementierungen haben. Aber ob das wünschenswert ist? Und wenn man das ausnutzt, würde es mehr Sinn machen, die Implementierung explizit zu machen und die virtuelle Methode das aufzurufen. –

+0

+1. Es ist wirklich total überflüssig. –

Verwandte Themen