我该怎么做:
Derived2 object = new Derived2();
object.templateMethod();
这将导致两个实现(事物和更多事情)被执行。
class BaseClass{
void templateMethod(){
methodImplementation();
if(this.base.getType() != typeof(BaseClass)) this.base.templateMethod();
}
void abstract methodImplementation();
}
class Derived1 : BaseClass{
void override methodImplementation(){
.. do things ..
}
}
class Derived2 : Derived1{
void override methodImplementation(){
.. do more things ..
}
}
然后所有的孩子和大孩子等等,只需要实现他们的方法实现部分,并且在最终对象中调用时将在所有级别调用它。
但是这个基础不是一件事。我需要的是调用实例化对象真实类的父实现,但代码在baseClass中,所以我可以在Template方法模式中使用它。
提前致谢,对不起,如果我不清楚。我只需要知道它是否可以完成。这是一个好的做法,最佳的,推荐的或有用的是另一件我会考虑的事情。
编辑:
上面的代码并不完全正确,它应该是这样的:
{{1}}
不同之处在于,在BaseClass.templateMethod()中,在第二行中调用的是templateMethod(),而不是methodImplementation(),因此它调用自身但是从父类的“透视图”调用。现在我的思考越来越多,这是不可能的,并且造成比任何事情更多的混乱。
答案 0 :(得分:1)
如果我理解正确,您希望从顶级派生类调用所有$ node request-sample.js
$
(Nothing is output...)
。你可以这样做:
methodImplementation
每个派生类只需要实现class BaseClass{
void templateMethod(){
methodImplementation();
}
void abstract methodImplementation();
}
class Derived1 : BaseClass{
// virtual as you want to derive it again
virtual void override methodImplementation(){
//.. do things ..
}
}
class Derived2 : Derived1{
void override methodImplementation(){
//.. do more things ..
base.methodImplementation();
}
}
的部分,最后调用它们的基类。由于methodImplementation
为methodImplementation
,因此请勿在第一级调用abstract
。同时将所有base
标记为虚拟,以便您可以再次覆盖它。
答案 1 :(得分:0)
您可以在派生类中调用基本方法。这是一个例子。您可以在派生类的每一行中调用基本方法;取决于你想要执行逻辑的时间。
methodImplementation
调用public class Animal
{
public void WhatAmI()
{
Console.WriteLine("Animal");
}
}
public class Fish : Animal
{
public new void WhatAmI()
{
base.WhatAmI();
Console.WriteLine("Fish");
}
}
public class HammerheadShark : Fish
{
public new void WhatAmI()
{
base.WhatAmI();
Console.WriteLine("HammerheadShark");
}
}
方法时:
WhatAmI
你会得到这个:
动物
鱼
双髻鲨
答案 2 :(得分:0)
好吧,即使有一种令人费解的方式来做到这一点,它甚至不能用于我需要的东西,我想这对任何类型的代码都没用。