Maison >développement back-end >C++ >Que fait le « nouveau » mot-clé dans les signatures de méthodes C# ?

Que fait le « nouveau » mot-clé dans les signatures de méthodes C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-02 18:54:38723parcourir

What Does the `new` Keyword Do in C# Method Signatures?

Comprendre le "nouveau" mot-clé dans les signatures de méthode

Lors d'une refactorisation de code, un développeur a introduit par erreur un nouveau mot-clé dans une signature de méthode :

private static new MyObject CreateSomething()
{
  return new MyObject{"Something New"};
}

Ceci compile validement en C#, soulevant des questions sur la signification du nouveau mot-clé dans la méthode signatures.

Que signifie le mot-clé "new" ?

Comme mentionné dans la documentation MSDN, le mot-clé new dans une signature de méthode modifie son comportement de référencement :

  1. Masque les méthodes héritées : Lorsqu'il est utilisé dans une classe dérivée, le mot-clé new empêche l'implémentation héritée d'une méthode d'être réutilisée. Au lieu de cela, la méthode de la classe dérivée est traitée comme une méthode complètement nouvelle.
  2. Remplace les méthodes non virtuelles et statiques : Contrairement au mot-clé override, qui ne peut remplacer que les méthodes virtuelles, le nouveau le mot-clé permet de remplacer les méthodes non virtuelles et même statiques dans la base class.

Exemple :

Considérons le code suivant :

public class A
{
   public virtual void One();
   public static void Two();
}

public class B : A
{
   public new void One();
   public override 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, la classe B redéfinit à la fois la classe One (en utilisant new) et la méthode Two (en utilisant override). En utilisant new pour One, la classe B masque l'implémentation héritée et introduit la sienne. Cependant, en utilisant override pour Two, il remplace la méthode virtuelle héritée.

Par conséquent, le nouveau mot-clé offre de la flexibilité en permettant aux méthodes héritées d'être remplacées ou masquées dans les cas où la substitution n'est pas applicable, comme pour les non- méthodes virtuelles et statiques.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn