Je n'ai jamais vraiment été prêt avec cette question: mais serait-il un crime terrible d'appeler base.Somemethod () sous condition dans une méthode remplacée?
Exemple comme dans: P>
protected override void SomeMethod() { if( condition > 0 ) base.SuperMethod(); }
5 Réponses :
Je ne peux pas penser à une raison pour laquelle cela serait mauvais au sommet de ma tête. p>
Ce serait beaucoup moins pire pour remplacer la méthode de base et copier la fonctionnalité de la méthode de base vers un appel conditionnellement au lieu de simplement appeler la méthode de base. p>
class HardHearingPerson : Person { override void Listen() { if (volume.Acceptable()) base.Listen(); } } Guess it depends on the context, but I am sure it could have justified usage.
Je le fais assez souvent. Chaque fois que je dois "faire quelque chose de plus" dans une méthode que je remplace, ça fait mes affaires et invoquez la méthode de base (ou inversement) p>
Manquez-vous la partie «conditionnellement»?
@Leppie: Non. Le "faire quelque chose de plus" peut inclure des conditionnels
Je pense que c'est totalement acceptable. Vous voudrez peut-être remplacer le comportement d'une méthode de classe de base uniquement dans certaines circonstances ou n'exprime le comportement en appelant la méthode de base puis faire votre propre chose. P>
Cela pourrait justifier une autre classe (spécialisation) :)
@Leppie - n'hérite pas d'une classe compte comme créant une autre classe? Prendre cet exemple: Classe CsharppProgrammer hérite de la classe programmeuse de classe ... CsharpProgrammer est une classe spécialisée basée sur le programmeur.
classes doit être Conçu pour l'héritage : strong> P >
Discuter s'il s'agit d'une "bonne pratique" manque le point, à mon avis. La manière dont une classe est structurée pour l'héritage est basée sur son objectif et sa conception. La décision de si em> vous peut strong> ou Vous ne pouvez pas décider quand il sera souhaitable ou non souhaitable d'appeler une méthode de classe de base lorsque vous remplacez sans comprendre la manière dont la classe de base est conçue et que chaque méthode servie. P>