Remplacer les méthodes virtuelles : accéder à l'implémentation de base
Dans un environnement orienté objet, lorsqu'une classe remplace une méthode virtuelle, elle devient une méthode courante question sur la façon d'accéder à l'implémentation d'origine.
Considérez le code suivant :
class A { virtual void X() { Console.WriteLine("x"); } } class B : A { override void X() { Console.WriteLine("y"); } } class Program { static void Main() { A b = new B(); // Call A.X somehow, not B.X... } }
Le L'objectif est d'appeler la méthode X de la classe A à partir de la portée de la classe B. Cependant, le comportement par défaut lors du remplacement d'une méthode virtuelle est de remplacer l'implémentation dans la classe dérivée.
Accès à l'implémentation de base
En C#, il n'est malheureusement pas possible d'accéder explicitement à l'implémentation de la méthode de base depuis l'extérieur de la méthode remplacée. En effet, le mécanisme de répartition de méthode virtuelle lie dynamiquement l'appel à l'implémentation remplacée dans B.
Approches alternatives
Si l'accès à l'implémentation de base est crucial, il peut y avoir défauts de conception qui méritent d’être pris en compte. La fonctionnalité peut ne pas convenir à l'objectif d'une méthode virtuelle et devrait potentiellement être implémentée dans une méthode non virtuelle.
Alternativement, on peut invoquer l'implémentation de base dans la méthode remplacée elle-même :
class B : A { override void X() { base.X(); Console.WriteLine("y"); } }
Cependant, cette invocation de méthode est limitée à la portée de la méthode remplacée par la classe dérivée.
En outre Exploration
Bien que C# ne fournisse pas de méthode directe pour accéder à l'implémentation de base, il existe des approches alternatives à considérer, telles que l'utilisation de la réflexion ou de la manipulation IL (Intermediate Language) pour obtenir ce comportement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!