implementação de interface explícita, por que a conversão explícita
Quando uma classe implementa explicitamente uma interface, por que você precisaexplicitamente converter a instância da classe para interface para usar o método implementado?
(Este exemplo é tirado daqui:MSDN: Implementação Explícita de Interface)
Você tem duas interfaces da seguinte maneira.
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
E você os implementa explicitamente.
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
Agora, para usar as interfaces, você tem o seguinte código.
// 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.
No bloco de código acima, por que você tem
IControl c = (IControl)obj;
ao contrário de
IControl c = obj;
?
O motivo da minha confusão é porque, por exemplo, você pode fazer o seguinte
IDictionary<string, string> c = new Dictionary<string, string>();
sem explicitamente lançarnew Dictionary
paraIDictionary
.
Obrigado.