c# - 更简洁的抽象方式

标签 c# interface refactoring

我正在重构一些旧代码,并对设计决策感到震惊

AbstractClassA
-Step 1
-Step 2
--Step 2.1
--Step 2.2
-Step 3

上面的抽象类有抽象方法Step 1、Step 2和Step 3。Step 2总是需要调用方法2.1和2.2。但是在目前的设计中,步骤2.1和步骤2.2并没有声明为抽象的,而是在每个继承类中实现和调用的。我计划通过将所有这些方法(包括 2.1 和 2.2)拉入一个接口(interface)来重构代码。然后我计划有这个接口(interface)的抽象类实现,其中步骤 2 将调用 2.1 和 2.2。但不知何故,这似乎并不整洁。我想知道这个设计是否有缺陷?

InterfaceA
-Step1
-Step2
-Step 2.1
-Step 2.2
-Step3

最佳答案

听起来您正在寻找的是:

interface IMyInterface
{
    void Step1();
    void Step2();
    void Step3();
}

abstract class MyBaseClass : IMyInterface
{
    public abstract void Step1();
    public void Step2()
    {
        Step2_1();
        Step2_2();
    }
    public abstract void Step3();

    protected abstract void Step2_1();
    protected abstract void Step2_2();
}

使用抽象接口(interface),当你想引用一些通用的东西时,将在运行时使用的确切实例可以改变。使用基类共享实现,因此您可以在每个子类中定义步骤 2.1 和步骤 2.2 中发生的事情,但是您的基类定义步骤 2 表示执行步骤 2.1 然后执行步骤 2.2。

关于c# - 更简洁的抽象方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463980/

相关文章:

c# - Http 请求状态代码 405 ReasonPhrase : '' Youtube APi

java - 安卓自定义事件

java - 实现采用枚举的接口(interface)的类

android - 安装 Android USB 驱动程序 - 没有发生

javascript - 使用不返回任何内容的返回语句是否有好处?

c# - 引用列按顺序排列

c# - 在 Entity Framework EDMX 中创建 View 之间的关联时出错

c# - Informix 和 .NET 的时间和日期时间格式

java - 比较 Java 中的重构模式

c++ - 使用 C++ 11 进行重构