Appel de la méthode de classe enfant depuis le parent

Est-il possible pour la méthode a.doStuff () d’imprimer “B done” sans éditer la classe A? Si oui, comment ferais-je cela?

class Program { static void Main(ssortingng[] args) { A a = new A(); B b = new B(); a.doStuff(); b.doStuff(); Console.ReadLine(); } } class A { public void doStuff() { Console.WriteLine("A did stuff"); } } class B : A { public void doStuff() { Console.WriteLine("B did stuff"); } } 

Je suis en train de jouer à un jeu de vapeur, Terraria. Et je ne veux pas décomstackr et tout recomstackr parce que ça va foirer à la vapeur. Mon programme “injecte” dans Terraria via XNA. Je peux utiliser les méthodes update () et draw () de XNA pour modifier certaines choses. Mais c’est assez limité. Je ne veux pas écraser les méthodes de base pour modifier plus de choses (par exemple, worldgen).

Oui, si vous déclarez que doStuff est virtual dans A puis override dans B

 class A { public virtual void doStuff() { Console.WriteLine("A did stuff"); } } class B : A { public override void doStuff() { Console.WriteLine("B did stuff"); } } 

Puisque B est effectivement A par inheritance et que la méthode est surchargée.

 A a = new B(); a.doStuff(); 

Le code pour les classes A & B que vous avez posté générera de toute façon ci-dessous l’avertissement du compilateur et vous demandera d’utiliser le new mot-clé de la classe B, bien que ce dernier comstack: membre ‘A.doStuff ()’

Utilisez la method hiding avec virtual mots clés new et virtual dans les classes Mapper et B comme suit:

 class Program { static void Main(ssortingng[] args) { Mapper a = new B(); //notice this line B b = new B(); a.doStuff(); b.doStuff(); Console.ReadLine(); } } class A { public void doStuff() { Console.WriteLine("A did stuff"); } } class Mapper : A { new public virtual void doStuff() //notice the new and virtual keywords here which will all to hide or override the base class implementation { Console.WriteLine("Mapper did stuff"); } } class B : Mapper { public override void doStuff() { Console.WriteLine("B did stuff"); } }