Lors de la refactorisation du code, une signature de méthode inhabituelle est apparue :
private static new MyObject CreateSomething() { return new MyObject{"Something New"}; }
Question : Quelle est la signification du mot-clé new dans cette signature de méthode ? Est-ce une fonctionnalité introduite dans C# 3.0 ? En quoi diffère-t-il du remplacement ?
Réponse :
Le nouveau mot-clé dans une signature de méthode a un objectif distinct du remplacement. Selon la documentation MSDN de Microsoft, il permet de masquer les membres hérités.
Un exemple illustrant la différence :
public class A { public virtual void One(); public void Two(); } public class B : A { public override void One(); public new void Two(); } B b = new B(); A a = b as A; a.One(); // Calls implementation in B a.Two(); // Calls implementation in A b.One(); // Calls implementation in B b.Two(); // Calls implementation in B
Dans cet exemple, override est utilisé sur la méthode One pour remplacer son implémentation dans la classe de base A. D'autre part, new est utilisé sur la méthode Two pour masquer l'implémentation héritée de A.
Clé Différence :
override modifie les méthodes virtuelles ou abstraites pour fournir différentes implémentations dans les classes dérivées. En revanche, new masque les membres hérités, à la fois virtuels et non virtuels, permettant ainsi de fournir de nouvelles implémentations dans les classes dérivées.
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!