Un certo numero di risposte dicono che non si può. Sono sbagliati Ci sono molti modi per farlo senza usare l'operatore di cast.
Tecnica n. 1: utilizzare l'operatore "as" anziché l'operatore di trasmissione.
void AnotherMethod()
{
(this as IAInterface).AInterfaceMethod(); // no cast here
}
Tecnica n. 2: utilizzare una conversione implicita tramite una variabile locale.
void AnotherMethod()
{
IAInterface ia = this;
ia.AInterfaceMethod(); // no cast here either
}
Tecnica # 3: scrivere un metodo di estensione:
static class Extensions
{
public static void DoIt(this IAInterface ia)
{
ia.AInterfaceMethod(); // no cast here!
}
}
...
void AnotherMethod()
{
this.DoIt(); // no cast here either!
}
Tecnica # 4: Introdurre un aiutante:
private IAInterface AsIA() { return this; }
void AnotherMethod()
{
this.AsIA().IAInterfaceMethod(); // no casts here!
}
fonte
2009-12-08 19:56:01
Qual è il problema con il cast? – adrianm
Mi sono appena accigliato quando ho scoperto questa funzione del linguaggio. È molto utile quando si implementano alcune interfacce come IConeable. –
Perché non farlo al contrario? Sposta il codice dal metodo dell'interfaccia esplicita in un metodo "normale". Quindi lascia che tutti i metodi (incluso il metodo dell'interfaccia esplicita) chiamino quel metodo. – adrianm