jawna implementacja interfejsu, dlaczego jawne rzutowanie

Kiedy klasa jawnie implementuje interfejs, dlaczego musiszjawnie rzucić instancję klasy do interfejsu, aby użyć zaimplementowanej metody?

(Ten przykład pochodzi stąd:MSDN: Explicit Interface Implementation)

Masz dwa interfejsy w następujący sposób.

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

I wdrażasz je wyraźnie.

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

Teraz, aby użyć interfejsów, masz następujący kod.

// 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. 

W powyższym bloku kodu, dlaczego masz

IControl c = (IControl)obj;

w przeciwieństwie do

IControl c = obj;

?

Powodem mojego zamieszania jest na przykład to, że możesz wykonać następujące czynności

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

bez wyraźnego rzucanianew Dictionary doIDictionary.

Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion