Un certain nombre de réponses disent que vous ne pouvez pas. Ils sont incorrects. Il y a beaucoup de façons de le faire sans utiliser l'opérateur de casting.
Technique n ° 1: Utiliser l'opérateur "as" à la place de l'opérateur de moulage.
void AnotherMethod()
{
(this as IAInterface).AInterfaceMethod(); // no cast here
}
Technique n ° 2: utiliser une conversion implicite via une variable locale.
void AnotherMethod()
{
IAInterface ia = this;
ia.AInterfaceMethod(); // no cast here either
}
Technique # 3: écrire une méthode d'extension:
static class Extensions
{
public static void DoIt(this IAInterface ia)
{
ia.AInterfaceMethod(); // no cast here!
}
}
...
void AnotherMethod()
{
this.DoIt(); // no cast here either!
}
Technique # 4: Mettre en place une aide:
private IAInterface AsIA() { return this; }
void AnotherMethod()
{
this.AsIA().IAInterfaceMethod(); // no casts here!
}
Quel est le problème avec la distribution? – adrianm
J'ai juste froncé les sourcils quand j'ai découvert cette fonction de langue. C'est très utile lors de l'implémentation de certaines interfaces comme IClonable. –
Pourquoi ne pas le faire dans l'autre sens? Déplacez le code de la méthode d'interface explicite vers une méthode "normale". Ensuite, laissez simplement toutes les méthodes (y compris la méthode d'interface explicite) appeler cette méthode. – adrianm