我有许多任务可以通过类似(但略有不同)的类来执行,这些类都有一组共同的功能。
我的目的是将此功能提取到父类中,因为我不希望自己实现此功能,所以我将其标记为abstract
。
但是,所有调用类都调用一个方法 - 用于包含提取的公共功能。我不想override
父类方法,但是我希望它在中执行到子类中定义的内容。
我最初认为这是部分方法的工作,但我认为这会在某种程度上打破语义。那么对我来说最好的方法是什么?在这里体验一点隧道视野。
答案 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
}
}