我有一个C#应用程序;有一个包含许多子类的父类。我想在父类中有一个方法,其中包含一些逻辑,并且每个子类都添加了自定义逻辑,这样当任何子类调用该方法时,它首先运行在父类中定义的一些代码,然后运行子类中定义的自定义部分。可以这样做吗?如果没有,实现这种代码执行的最佳方法是什么?
答案 0 :(得分:3)
是的,这可以通过在基类中定义一个虚方法,并从你的"有效负载"中调用它来完成。自定义逻辑需要插入的地方"插入"。将此方法抽象化是很常见的:
abstract class MyBase {
protected abstract void CustomLogic(); // Subclasses implement this
public void PayloadMethod() {
... // Do somethig
CustomLogic();
... // Do something else
}
}
class Derived1 : MyBase {
protected override void CustomLogic() {
... // Custom logic 1
}
}
class Derived2 : MyBase {
protected override void CustomLogic() {
... // Custom logic 2
}
}
class Derived3 : MyBase {
protected override void CustomLogic() {
... // Custom logic 3
}
}
类层次结构的客户端实例化DerivedN
个类之一,并调用PayloadMethod()
,调用CustomLogic
作为其调用的一部分。
此方法称为Template Method Pattern。
答案 1 :(得分:2)
实现它的一种方法是将非虚方法定义为执行基类中定义的代码的入口点,然后调用子类可以(或必须)覆盖的虚拟(或抽象)受保护方法,如下所示:
abstract class Foo
{
public void Bar()
{
// some code defined in the parent class
BarCore(); // the customized part of it as defined in the child class
}
protected virtual void BarCore() { }
}
答案 2 :(得分:1)
实现这一目标的最简单方法是使用两种方法:
class BaseClass
{
public void DoSomething()
{
// base class code
// derived class code, modifiable by the derived class
this.DoItSpecificallyForThatDerivedClass();
}
protected abstract void DoItSpecificallyForThatDerivedClass();
}
public class ADerivedClass : BaseClass
{
protected override void DoItSpecificallyForThatDerivedClass()
{
// code specific to this instance and/or class
}
}