est ici la différence en anglais simple:
Supposons que vous ayez une interface Machine
, qui a une fonction Run()
, et une autre interface Animal
qui a également une fonction appelée Run()
. Bien sûr, quand une machine tourne, on parle de démarrage, mais quand un animal court, on parle de ça en train de bouger. Alors qu'arrive-t-il lorsque vous avez un objet, appelons-le Aibo
qui est à la fois un Machine
et un Animal
? (Aibo est un chien mécanique, au fait.) Quand Aibo
court, démarre-t-il ou se déplace-t-il? la mise en œuvre de façon explicite une interface vous permet de faire cette distinction:
interface Animal
{
void Run();
}
interface Machine
{
void Run();
}
class Aibo : Animal, Machine
{
void Animal.Run()
{
System.Console.WriteLine("Aibo goes for a run.");
}
void Machine.Run()
{
System.Console.WriteLine("Aibo starting up.");
}
}
class Program
{
static void Main(string[] args)
{
Aibo a = new Aibo();
((Machine)a).Run();
((Animal)a).Run();
}
}
Le problème ici est que je ne peux pas simplement appeler a.Run()
parce que mes deux implémentations de la fonction sont explicitement attachés à une interface. Cela a du sens, car sinon, comment le complicateur pourrait-il savoir lequel appeler? Au lieu de cela, si je veux appeler la fonction Run()
sur mon Aibo
directement, je devrai également implémenter cette fonction sans interface explicite.
Une implémentation explicite est également utile lorsque votre classe doit implémenter une interface interne que vous ne souhaitez pas exporter publiquement à partir de votre assembly. – Dave