2014-01-23 5 views
5

geerbt Vor kurzem habe ich von meinem Freund gefragt, warum Dictionary<T, V> explizit ICollection<KeyValuePair<T, V>> implementiert, wenn es bereits von IDictionary<T,V> vererbt wird?Warum Wörterbuch <T, V> explizit implementiert ICollection <KeyValuePair <T, V>>, wenn es bereits von IDictionary <T,V>

Ich erkannte, dass ich die Antwort auch nicht kenne. Hier sind die Links zu offiziellen Dokumentation:

Dictionary<T, V>-http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx IDictionary<T,V>-http://msdn.microsoft.com/en-us/library/s4ys34ea(v=vs.110).aspx

Gibt es einen bestimmten Grund, warum es so getan wurde? Gibt es ein bestimmtes Architekturmuster oder irgendetwas?

+0

Sie können nicht sehen, dass aus der Dokumentation - es zeigt alle Schnittstellen, unabhängig davon, wie sie wurden implementiert. – CodesInChaos

+0

Wenn Sie über die explizit implementierten Methoden sprechen, sind diese explizit, um zu vermeiden, dass sie in der Klasse selbst angezeigt werden, nicht wegen irgendeiner Beziehung zu IDictionary. – CodesInChaos

+1

@CodesInChaos Ich schaue mir den Quellcode nach deinem Kommentar an, aber es ist das gleiche wie in der Dokumentation. –

Antwort

8

Dies scheint einfach ein Fall zu sein, in dem alle implementierten Schnittstellen implizit angezeigt werden.

Ich machte dieses folgende Beispiel, um dies zu testen. Mein Quellcode ist:

public class Class1 : ITest 
{ 
    public void Testing() 
    { 
     Console.WriteLine("Test"); 
    } 

    public void Testing2() 
    { 
     Console.WriteLine("Test2"); 
    } 
} 

public interface ITest : ITest2 
{ 
    void Testing(); 
} 

public interface ITest2 
{ 
    void Testing2(); 
} 

Jetzt gehen in Reflector.Net und decompiling ich diese:

public class Class1 : ITest, ITest2 
{ 
    public void Testing() 
    { 
     Console.WriteLine("Test"); 
    } 

    public void Testing2() 
    { 
     Console.WriteLine("Test2"); 
    } 
} 
+0

Ooh, guten Ruf. Compiler macht es !! – Haney

Verwandte Themen