抽象类还是部分?

时间:2012-03-08 10:11:24

标签: c# .net abstract-class

我有许多任务可以通过类似(但略有不同)的类来执行,这些类都有一组共同的功能。

我的目的是将此功能提取到父类中,因为我不希望自己实现此功能,所以我将其标记为abstract

但是,所有调用类都调用一个方法 - 用于包含提取的公共功能。我不想override父类方法,但是我希望它在中执行到子类中定义的内容。

我最初认为这是部分方法的工作,但我认为这会在某种程度上打破语义。那么对我来说最好的方法是什么?在这里体验一点隧道视野。

4 个答案:

答案 0 :(得分:7)

你可以这样做:

public abstract class Parent
{
    public void TheSingleMethod()
    {
        CommonFunctionality();

        InternalDo();
    }

    protected abstract void InternalDo();

    private void CommonFunctionality()
    {
        // Common functionality goes here.
    }
}

public class Derived : Parent
{
    protected override void InternalDo()
    {
        // Additional code of child goes here.
    }
}

答案 1 :(得分:1)

听起来你需要Template method

例如

abstract class BaseClass {
    public void Common Method() {
        // Common tasks

        // Call template method
        this.SubclassSpecificMethod();

        // Can also do more code after the call to the template method
    }

    protected abstract void SubclassSpecificMethod();
}

答案 2 :(得分:0)

听起来像是作文,Decorator pattern可能是你的另一种选择。

答案 3 :(得分:0)

你也可以这样做:

abstract class BaseClass
{
    public void Method() {
        // Common tasks
    }
}

class RealClass : BaseClass 
{
    public void Method() {
         base.Method();
         // custom tasks for this class
    }
}