Vous trouverez toujours des situations délicates dans lesquelles le new
Le mot-clé peut être utilisé pour se cacher alors qu'il peut être évité la plupart du temps.
Cependant, récemment, j'ai vraiment eu besoin de ce mot-clé, principalement parce que le langage ne dispose pas d'autres fonctionnalités synthétiques appropriées pour compléter un accesseur existant, par exemple :
Si vous considérez un cours à l'ancienne comme :
KeyedCollection<TKey, TItem>
Vous remarquerez que l'accesoire pour accéder aux éléments par l'index est :
TItem this[Int32 index] { get; set; }
A la fois { get; set; }
et ils sont bien sûr obligatoires en raison de l'héritage relatif aux ICollection<T>
y Collection<T>
mais il n'y a qu'un seul { get; }
pour accéder aux objets par l'intermédiaire de leurs clés (j'ai quelques suppositions sur cette conception et il y a beaucoup de raisons pour cela, donc notez que j'ai pris le KeyedCollection<TKey, TItem>)
à titre d'illustration).
De toute façon, il n'y a qu'un seul getter pour l'accès aux clés :
TItem this[TKey key] { get; }
Mais qu'en est-il si je veux ajouter le { set; }
support, techniquement parlant ce n'est pas si stupide surtout si vous continuez à raisonner à partir de l'ancienne définition de la propriété, c'est juste une méthode... la seule façon est d'implémenter explicitement une autre interface factice mais quand vous voulez faire de l'implicite vous devez venir avec l'interface new
mot-clé, je cache la définition de l'accesseur, je garde la définition de la base get ; et j'ajoute juste un ensemble rempli de quelques choses personnelles pour que ça fonctionne.
Je pense que pour ce scénario très spécifique, ce mot-clé est parfaitement applicable, en particulier dans un contexte où il n'y a pas d'apport à l'activité de l'entreprise. { get; }
partie.
public new TItem this[TKey key]
{
get { return base... }
set { ... }
}
C'est à peu près la seule astuce pour éviter ce genre d'avertissement car le compilateur vous suggère que vous cachez peut-être sans vous en rendre compte ce que vous faites.