interface I { int J(); }
class A : I
{
public int J(){return 0; } // note NOT virtual (and I can't change this)
}
class B : A, I
{
new public int J(){return 1; }
}
B b = new B();
A a = b;
I ib = b, ia = a;
b.J(); // should give 1
a.J(); // should give 0 (IMHO)
ia.J(); // ???
ib.J(); // ???
Je sais que je pouvais essayer, mais je suis à la recherche d'une bonne source de autorité pour ce coin tout et je préfère ne pas simplement commencer à creuser myopes à travers les textes MSDN (Je n'ai aucune idée de ce que Google pour).Comment cela fonctionnera-t-il? (interfaces et fonctions non virtuelles)
La mise en œuvre de l'interface * et * à l'aide du qualificatif «nouveau» est à la fois redondante et confuse. La 'nouvelle' implémentation est destinée à permettre à une sous-classe d'avoir une implémentation qui diffère de sa classe de base pour les cas où elle est appelée explicitement. Si la classe de base implémente explicitement l'interface, alors * je pense * vous pourriez obtenir (IFace) Child.IMethod() = A; (Base) Child.IMethod() = B; (Enfant) Child.IMethod = C – STW
Vous êtes dans l'erreur (voir mon commentaire sur votre message) mais en bref sans le "je" sur B, IJ est mis en œuvre par AJ même sur B (je l'ai testé) – BCS
Vous ' re right, mon exemple était si B: A, pas B: A, je ... Plutôt que d'avoir B: A, je pourrais vous faire B: I et utiliser une instance interne de A pour fournir cette fonctionnalité et exposer ses méthodes publiquement ? – STW