2012-04-15 83 views
6

我目前正在爲我的MS 70-515考試而學習。在其中一種實踐中,作者實現了一個既是隱式又是顯式的接口。顯式實現只是調用隱式實現。顯式的實現只是沒有解釋就列出來。實現接口的隱式和顯式都有意義嗎?

是否有意義同時具有接口的隱式和顯式實現?我認爲明確的實現是多餘的(在這種情況下)。

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

[Implicit and Explicit implementation of interface](http://stackoverflow.com/questions/2756520/implicit-and-explicit-implementation-of-interface) – 2012-04-15 19:50:56

+2

這些考試總是有一英里長的錯誤。您可以提交自己的:http://oreilly.com/catalog/errata.csp?isbn=9780735627406 – 2012-04-15 20:03:23

回答

10

顯式的實現似乎是完全多餘的。

我想不出一種方式來調用它,如果你離開它會有所作爲。

有一個小小的差異,隱含的版本是虛擬的意思,它可以被覆蓋。顯式版本將始終在此入口點處調用。但是由於它只調用虛擬成員,所以這裏不使用差異。

+0

Marc Gravell [說](http://stackoverflow.com/a/2756728/537956)實現這兩個原因之一可能非明確的方法是'虛擬'或'抽象',以便子類用於'覆蓋'。在我的例子中,它確實是'虛擬的',但我不明白爲什麼這也是實現顯式接口的原因。通過評論他的回答,我會問馬克他的意思。 – comecme 2012-04-15 19:48:02

+0

你可以有2個完全不同的實現。但是否這是可取的?而當利用它時,會更有意義地將實現放在明確的位置,並使虛擬方法調用該實現。 – 2012-04-15 20:00:55

+0

+1。這真的是多餘的。 – 2012-04-15 20:18:30