«Nouveau» mot-clé dans la déclaration de propriété dans c #

J’ai reçu un projet .net à maintenir. Je ne faisais que parcourir le code et je l’ai remarqué sur une déclaration de propriété:

public new ssortingng navUrl { get { return ...; } set { ... } } 

Je me demandais ce que le new modificateur fait à la propriété?

Il cache la propriété navUrl de la classe de base. Voir le nouveau modificateur . Comme mentionné dans cette entrée MSDN, vous pouvez accéder à la propriété “cachée” avec des noms BaseClass.navUrl : BaseClass.navUrl . L’abus de l’une ou l’autre peut entraîner une confusion massive et une folie possible (code cassé).

new cache la propriété.

Cela pourrait être comme ça dans votre code:

 class base1 { public virtual ssortingng navUrl { get; set; } } class derived : base1 { public new ssortingng navUrl { get; set; } } 

Dans la classe dérivée, la propriété navUrl propriété de la classe de base.

Ceci est également documenté ici .

Extrait de code de msdn.

 public class BaseClass { public void DoWork() { } public int WorkField; public int WorkProperty { get { return 0; } } } public class DerivedClass : BaseClass { public new void DoWork() { } public new int WorkField; public new int WorkProperty { get { return 0; } } } DerivedClass B = new DerivedClass(); B.WorkProperty; // Calls the new property. BaseClass A = (BaseClass)B; A.WorkProperty; // Calls the old property. 

Quelques fois appelés Shadowing ou méthode masquant ; La méthode appelée dépend du type de la référence au moment où l’appel est effectué. Cela pourrait aider.

https://msdn.microsoft.com/en-us/library/435f1dw2.aspx

Regardez le premier exemple ici, cela donne une assez bonne idée de la façon dont le new mot-clé peut être utilisé pour masquer les variables de la classe de base.