2017-07-29 67 views
2

我写了一些不包含密封的类,其中包含3个虚拟公共方法和一个私有方法。如何在调用自己的植入之前强制继承类的方法实现来调用基方法?

我公开这个类,所有我的开发组成员都可以使用这个类(包括继承和重写虚拟公共方法)。

私人方法名称之一是'PrivateMethod77()'。

每次公共方法'PublicMethod77()'调用=>'PrivateMethod77'是在方法实现的第一行调用(在此行后面有更多的蕴含逻辑)。

我想保持这种逻辑与“力”的方法PublicMethod77调用PrivateMethod77方法的PublicMethod77

,第一行是有办法做到这一点的继承和超越?

回答

3

我不认为你可以强制继承类总是先调用一个方法的超级实现,但是:

通常我使用Template method pattern的情况是这样的:

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

代码输出该呼叫new TemplateImplementer().TemplateMethod()

//Everyone calls me; 
    //Implemented in TemplateImplementer 

Template Method模式的好处:

  1. 强制执行抽象方法。
  2. 该代码保持干燥。
  3. 错误被避免,开发人员在开发过程中受到指导。