Microsoft ha uno detailed write up sull'argomento ma si riduce all'implementazione di più interfacce/classi che hanno lo stesso metodo in esse. Implicito non funziona più in quel contesto.
class Test
{
static void Main()
{
SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;
// The following lines all call the same method.
sc.Paint();
ctrl.Paint();
srfc.Paint();
}
}
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass
Se dovessimo prendere l'approccio esplicito, finiamo con questo.
Tutto si riduce alla fornitura di unicità quando i tipi implementati si scontrano. Nel tuo esempio, Foo
èIFoo
.
fonte
2012-12-19 19:47:08
Perché stai facendo questo? Stai effettivamente legando gli utenti di "Foo" all'implementazione concreta, rendendo difficile il mocking per i test unitari e, in generale, aumentando l'accoppiamento nella tua applicazione ... –
I due approcci sono praticamente mutuamente esclusivi. Entrambi funzionano ma hanno scopi diversi. Non useresti entrambi gli approcci per la stessa interfaccia nella stessa classe concreta (almeno non che io possa pensare) – dkackman
@SteveCzetty Quindi la domanda dell'OP; dove è necessario implementare esplicitamente l'interfaccia. –