【问题标题】:How to force inheriting class's method implementation to call base method before invoke own implantation?如何在调用自己的植入之前强制继承类的方法实现调用基方法?
【发布时间】:2018-01-05 12:31:03
【问题描述】:

我写了一些非密封类,其中包含 3 个虚拟公共方法和一个私有方法。

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

其中一个私有方法名称是“PrivateMethod77()”。

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

我想保留这个逻辑并“强制”方法 PublicMethod77 的继承和覆盖以调用 PrivateMethod77 方法作为 PublicMethod77 的第一行

有办法吗?

【问题讨论】:

    标签: c# oop inheritance design-patterns overriding


    【解决方案1】:

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

    通常我使用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
    

    模板方法模式的好处:

    1. 强制实现抽象方法。
    2. 代码保持干燥。
    3. 避免了错误,并指导开发人员进行开发。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 2010-10-21
      • 2015-07-15
      • 2014-10-28
      • 1970-01-01
      • 2016-07-12
      • 2012-05-11
      • 2010-12-26
      相关资源
      最近更新 更多