2012-04-15 6 views
6

私は現在私のMS 70-515試験のために勉強しています。このプラクティスの1つでは、作成者は暗黙的で明示的なインタフェースを実装しています。明示的な実装は暗黙の実装を呼び出すだけです。明示的な実装は、説明なしにリストされています。暗黙と明示の両方のインタフェースを実装するのは意味がありますか?

インターフェイスの暗黙的実装と明示的実装の両方を持つことは理にかなっていますか?明示的な実装は冗長であると思います(この場合)。

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(); 
    } 
} 

私は暗黙の実装が公開されているので、コードは明示的な実装なしでうまく動作しているようです。

MCTS Self-Paced Training Kit (Exam 70-515): Web Applications Development with Microsoft .NET Framework 4第9章、レッスン2、プラクティス3が正確です。

+0

[インターフェイスの暗黙的かつ明示的な実装]の複製が可能です。(http://stackoverflow.com/questions/2756520/implicit-and-explicit-implementation-of-interface) –

+2

これらの試験では、常に1マイルのエラッタがあります。あなたは自分自身を提出することができます:http://oreilly.com/catalog/errata.csp?isbn=9780735627406 –

答えて

10

明示的な実装は完全に余計なようです。

あなたがそれを放棄した場合、それが差をつける場所を呼び出す方法は考えられません。

小さな違いが1つあります。暗黙的なバージョンは、オーバーライドできる仮想的な意味です。明示的なバージョンは常にこのエントリポイントで呼び出されます。しかし、それは仮想メンバーを呼び出すだけなので、違いはここでは使用されません。

+0

Marc Gravell [say](http://stackoverflow.com/a/2756728/537956)両方を実装する一つの理由非明示的なメソッドは 'virtual'または' abstract'です。サブクラスは 'override'_になります。私の例では、実際には 'virtual'ですが、明示的なインタフェースを実装する理由がどうなるのか分かりません。私は彼の答えにコメントすることによって、彼が何を意味するのかをマークに尋ねます。 – comecme

+0

2つの全く異なる実装を持つことができます。しかしそれが望ましいかどうか?そして、それを利用するときは、実装を明示的に入れて、仮想メソッドで呼び出すようにしてください。 –

+0

+1。それは本当に完全に余分です。 –

関連する問題