Votre première question a déjà reçu une réponse. Voici un aller aux autres:
void new InsertUser(User user)
Cela créerait une nouvelle implémentation de InsertUser qui voilent celui de la classe de base.Alors:
myClassBInstance.InsertUser(user);
appelleraient MyClassB.InsertUser(), alors que
MyClassA myClassAInstance = myClassBInstance;
myClassAInstance.InsertUser(user);
appellerait MyClassA.InsertUser().
Ceci est en contraste avec l'implémentation d'interface explicite, qui seulement sera disponible via l'interface. Puis
IMyClassA myIClassAInstance = myClassBInstance;
myIClassAInstance.InsertUser(user);
appelleraient MyClassB.InsertUser, alors que:
myClassBInstance.InsertUser(user);
... appelleraient MyClassA.InsertUser().
Maintenant, pour la dernière question: Si MyClassA implémente IMyClass, la déclaration:
public class MyClassB : MyClassA, IMyClass { }
est en fait redondant (mais légal). Comme vous le supposez, MyClassB hérite de l'interface de MyClassA. Ainsi, la déclaration
public class MyClassB : MyClassA { }
serait équivalente.
donc la méthode dans MyClassA doit être marquée virtuelle, et puis je viens de la surcharger? C'est ce que j'ai l'habitude de faire! – mrblah