6
votes

Appeler une méthode de base remplacée conditionnelle en C #

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(); 
}


0 commentaires

5 Réponses :


10
votes

Je ne peux pas penser à une raison pour laquelle cela serait mauvais au sommet de ma tête.

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.


0 commentaires

7
votes
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.

0 commentaires

2
votes

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)


2 commentaires

Manquez-vous la partie «conditionnellement»?


@Leppie: Non. Le "faire quelque chose de plus" peut inclure des conditionnels



1
votes

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.


2 commentaires

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.



1
votes

classes doit être Conçu pour l'héritage :

Si la classe de base est conçue de manière à ce que les versions de base d'appel de certaines méthodes sont facultatives, il est correct d'omettre ces appels.

Si la classe de base est conçue de manière à ce que les versions de base doivent être appelées, il n'est pas correct de les omettre.

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 vous peut ou doit les versions de base d'appel d'une méthode fait partie des classes interface publique , en ce qui concerne l'héritage.

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.


0 commentaires