我可以从基类中调用孩子的父方法吗?

时间:2017-04-03 11:51:27

标签: c# inheritance

我该怎么做:

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(),因此它调用自身但是从父类的“透视图”调用。现在我的思考越来越多,这是不可能的,并且造成比任何事情更多的混乱。

3 个答案:

答案 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(); } } 的部分,最后调用它们的基类。由于methodImplementationmethodImplementation,因此请勿在第一级调用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)

好吧,即使有一种令人费解的方式来做到这一点,它甚至不能用于我需要的东西,我想这对任何类型的代码都没用。