Aujourd'hui, il m'arrive de trouver qu'une classe C# peut hériter d'une interface de manière implicite et explicite. Cela me surprend. Si C# fonctionne de cette manière, une instance peut se comporter différemment lorsqu'elle est référencée de manière différente.Pourquoi une classe C# peut-elle hériter d'une même interface de manière implicite et explicite?
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
Au-dessus des pistes de code et la sortie
do something implicitly
do something explicitly
Je crois que cette conception de # C font l'incohérence du comportement. Peut-être est-il obligatoire qu'une classe C# puisse hériter d'une interface de manière implicite ou explicite, mais pas les deux.
Y a-t-il une raison pour laquelle C# est conçu de cette manière?
Je n'avais pas remarqué que vous pouviez faire les deux. Cela semble un peu stupide ... –
Ce n'est pas idiot. Lisez les réponses. –
Désolé pour le double-retag, j'essayais d'ajouter "explicit-interface-member-implementation" en tant que tag (c'est le nom de la fonctionnalité que vous utilisez), mais apparemment ce tag serait trop long. :) – Rytmis