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.