Remplacer une méthode remplacée (C #)

J’essaie de remplacer une méthode remplacée (si cela a du sens!) En C #.

J’ai un scénario similaire à celui ci-dessous, mais lorsque j’ai un point d’arrêt dans SampleMethod () dans la classe “C”, il n’est pas touché, alors que le même point d’arrêt est utilisé dans la méthode “B”.

public class A { protected virtual void SampleMethod() {} } public class B : A { protected override void SampleMethod() { base.SampleMethod(); } } public class C : B { protected override void SampleMethod() { base.SampleMethod(); } } 

Merci d’avance!


Modifier:

Ok, le contexte aiderait:

Ceci est dans le contexte d’un contrôle composite. La classe A hérite de CompositeControl et appelle SampleMethod () après avoir redéfini la méthode CreateChildControls ().

Sans voir le code qui appelle SampleMethod, je suppose que vous avez un object de type B et appelez SampleMethod à ce sujet.

Le dépassement peut être effectué dans une chaîne aussi longtemps que vous le souhaitez. Le code que vous avez montré est correct.

La seule explication possible du comportement observé est que l’object auquel vous faites référence est en réalité de type B Je suggère que vous vérifiiez ceci, et si les choses ne voulaient toujours pas avoir un sens, publiez l’autre code approprié.

Le point d’arrêt n’est probablement pas touché car vous avez en fait instancié une instance de la classe “B”.

La résolution de substitution de méthode fonctionne en fonction du type d’ exécution réel de la classe dont la méthode doit être appelée. Donc, si vous aviez le code suivant:

 C c = new C(); c.SampleMethod(); 

et les suivants:

 C c = new C(); B b = (B)c; b.SampleMethod(); 

les deux types d’ exécution de la classe dont SampleMethod sera appelé est le type B

Cette solution fonctionne bien; bien que pour l’utiliser réellement en dehors de la classe dans laquelle se trouve la méthode, vous devez définir l’access de SampleMethod sur public plutôt que sur protected dans tous les cas où il apparaît, ainsi:

 public class A { public virtual void SampleMethod() { Console.WriteLine("lol"); } } public class B : A { public override void SampleMethod() { base.SampleMethod(); } } public class C : B { public override void SampleMethod() { base.SampleMethod(); } } 

pour remplacer plus d’une fois dans la hiérarchie utiliser quelque chose comme ça

 // abstract class abstract class A { public abstract void MethodOne(); } // class B inherits A class B : A { public override void MethodOne() { Console.WriteLine("From Class B"); } } // class C inherits B class C : B { public override void MethodOne() { Console.WriteLine("From Class C"); } } // class D inherits C class D : C { public override void MethodOne() { Console.WriteLine("From Class D"); } } // etc...... // class Main method Class class MainClass { public static void Main() { B[] TestArray = new B[3]; B b1 = new B(); C c1 = new C(); D d1 = new D(); TestArray[0] = b1; TestArray[1] = c1; TestArray[2] = d1; for (int i = 0; i < TestArray.Length; i++) { TestArray[i].MethodOne(); } Console.ReadLine(); } } 

Je l'ai fait dans ce code dans ce lien http://www.4shared.com/rar/0SG0Rklxce/OverridingMoeThanOnce.html

Le remplacement de méthode est une fonctionnalité POO qui permet à une classe enfant de fournir une implémentation spécifique d’une méthode déjà fournie par l’une de ses classes parents.