Considérez le code suivant:
public abstract class Test1 { public object Data { get; set; } } public abstract class Test2<T> : Test1 { public T Data { get; set; } }
4 Réponses :
L'effet unique Le mot clé code> nouveau code> est de supprimer l'avertissement. Le but d'obtenir l'avertissement lorsqu'il n'utilise pas le mot-clé code> nouveau code> est de vous empêcher d'ourdler accidentellement la méthode lorsque vous vouliez vraiment le remplacer. P>
Activez les avertissements de rapport comme des erreurs. Cela vous obligera à être plus explicite avec votre utilisation de nouveaux et de remplacement. P>
Exemple: P> < Pré> xxx pré> p> Nouveau code> est utilisé pour masquer une méthode ou une propriété de la classe de base. Ceci est
nouveau ne fait rien (sauf supprimer un avertissement). La cachette se produit en laissant tomber le remplacement.
Oui, mais en spécifiant le mot clé nouveau code>, vous masquez explicitement le membre. Bien que cela ne change rien à la fin, cela prouve que vous savez ce que vous faites et que vous n'avez pas accidentellement oublié le mot clé code>
Non, la cachette se passe aussi w / o nouveau
Je n'ai jamais dit que ça ne l'avait pas ... Je ne dis que ça en utilisant le mot-clé nouveau code>, vous i> masquez le membre, il n'y a donc pas d'ambiguïté sur vos intentions
Si une méthode de classe dérivée doit être considérée comme une substitution pour une méthode de classe de base du même nom dépend souvent de savoir si l'auteur de la méthode de classe dérivée était au courant de la méthode de la classe de base et de son contrat associé et de son contrat associé. a écrit la méthode de classe dérivée pour remplir ce contrat. Dans la plupart des cas où une méthode de classe dérivée présente le même nom et la même signature qu'un procédé de classe de base, la méthode de classe dérivée serait destinée à remplir le contrat de base, mais si l'auteur d'une classe de base déployée ajoute un nom Sans se rendre compte que le même nom est utilisé à un autre but dans une classe dérivée, l'auteur de la méthode de classe dérivée ne peut pas être présumée d'avoir écrit sa méthode pour être conforme au contrat d'une méthode de classe de base qui n'existait pas à l'époque. . p>
Il n'y a pas de moyen général par lequel le C # peut indiquer que des méthodes différentes ont été ajoutées aux classes, et donc aucun moyen pour le compilateur de savoir si l'auteur d'une méthode de classe dérivée savait quoi que ce soit sur l'existence d'une valeur similaire nommée Méthode de la classe de base sauf si em> l'auteur de la méthode de classe dérivée indique expressément au compilateur, qu'il soit au courant de l'existence de la méthode de la classe de base en utilisant le Je suggérerais d'interpréter les modificateurs (ou je l'absence) comme: p>
aucun - l'auteur n'est pas au courant de l'existence d'une méthode de classe de base, et donc ne peut pas em> s'attendre à remplir son contrat. P> LI>
La raison pour laquelle le compilateur par défaut de supposer Nouveau code> ou
remplacer les modificateurs code>. p>
Nouveau code> - L'auteur est conscient de la méthode de la classe de base et, pour une raison quelconque, a écrit cette méthode afin de ne pas le remplir. P> LI>
Remplacement code> - L'auteur est conscient de la méthode de la classe de base et de son contrat, et a écrit cette méthode pour la réaliser. P> LI>
ul>
nouveau code> mais avec un avertissement est que dans les cas où la méthode est ajoutée à la classe dérivée avant la méthode de la classe de base, l'auteur ne peut éventuellement être attendu. au courant du contrat de base de la classe de base et ne peut pas avoir l'intention de remplir un contrat qui n'existait pas encore, mais dans les cas où la méthode de classe dérivée est écrite après la méthode de la classe de base, l'auteur devrait généralement choisir Un autre nom, sauf si l'auteur a l'intention de remplir le contrat de la classe de base ou a une raison spécifique d'utiliser le même nom sans remplir le contrat. Le compilateur ne peut pas dire quelle méthode a été écrite d'abord et n'a donc aucun moyen de savoir quel comportement est approprié. P>