explizite Schnittstellenimplementierung, warum explizites Casting

Wenn eine Klasse eine Schnittstelle explizit implementiert, warum müssen Sie das tun?ausdrücklich Die Klasseninstanz in die Schnittstelle umwandeln, um die implementierte Methode zu verwenden?

(Dieses Beispiel stammt von hier:MSDN: Explizite Schnittstellenimplementierung)

Sie haben zwei Schnittstellen wie folgt.

interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}

Und Sie implementieren sie explizit.

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

Um nun die Schnittstellen zu verwenden, haben Sie den folgenden Code.

// Call the Paint methods from Main.

SampleClass obj = new SampleClass();
//obj.Paint();  // Compiler error.

IControl c = (IControl)obj;
c.Paint();  // Calls IControl.Paint on SampleClass.

ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass. 

Warum haben Sie im obigen Codeblock?

IControl c = (IControl)obj;

im Gegensatz zu

IControl c = obj;

?

Der Grund für meine Verwirrung ist, dass Sie beispielsweise Folgendes tun können

IDictionary<string, string> c = new Dictionary<string, string>();

ohne explizit zu gießennew Dictionary zuIDictionary.

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage