2017-07-29 3 views
2

J'ai écrit une classe non scellée qui contient 3 méthodes publiques virtuelles et une méthode privée.Comment forcer l'héritage de l'implémentation de la méthode de la classe à appeler la méthode de base avant d'appeler sa propre implantation?

Et je rends publique cette classe que tous les membres de mon groupe de développement peuvent utiliser cette classe (include hérite et remplace les méthodes publiques virtuelles).

L'un des noms de méthodes privées est 'PrivateMethod77()'.

Chaque fois que la méthode publique 'PublicMethod77()' est call => le 'PrivateMethod77' est appelé dans la première ligne de l'implémentation de la méthode (après cette ligne, il y a plus de logique d'implication).

Je veux garder cette logique et la « force » et les inherits remplacement de la méthode PublicMethod77 pour appeler la méthode PrivateMethod77 comme la première ligne de la PublicMethod77

Est-il possible de le faire?

Répondre

3

Je ne pense pas que vous pouvez appliquer les classes héritant de toujours d'abord appeler super la mise en œuvre d'une méthode, mais:

Normalement, j'utiliser un Template method pattern pour les cas comme celui-ci:

public abstract class TemplateEnforcer 
{ 
    private void TheSame() 
    { 
     Console.WriteLine("Everyone calls me;"); 
    } 

    public void TemplateMethod() 
    { 
     this.TheSame(); 
     this.NeedsImplementation(); 
    } 

    protected abstract void NeedsImplementation(); 
} 

public class TemplateImplementer : TemplateEnforcer 
{ 
    protected override void NeedsImplementation() 
    { 
     Console.WriteLine("Implemented in TemplateImplementer"); 
    } 
} 

sortie Code pour cet appel new TemplateImplementer().TemplateMethod():

//Everyone calls me; 
    //Implemented in TemplateImplementer 

avantages motif de la méthode de modèle:

  1. La mise en œuvre de la méthode abstraite est forcée.
  2. Le code est conservé au DRY.
  3. Les bogues sont évités et les développeurs sont guidés dans leur développement.