明确地调用基础或重写方法

时间:2016-05-02 18:22:15

标签: c# oop override abstract extend

我有一些扩展的C#类,并且已经覆盖了方法。

public class BaseClass{
    public abstract void method(){return 0;}
}

public class OverClass : BaseClass{
    public override void method(){
        // some code
        return 2;
    }
}

在重写方法中,我可以调用base.method()来调用其基类的原始方法。

1)我怎样才能从班级以外的地方做到这一点?这样我就可以从OverClass的对象引用中明确调用BaseClass的方法。

2)从BaseClass的对象,我可以调用OverClass的方法吗?

3)如果方法是静态的,从BaseClass的静态main,我可以调用OverClass的方法吗?

我需要这个,因为BaseClass中的某些方法具有不需要重写的可重用代码,以及其他抽象/虚拟方法和具有特定OverClass代码的方法。因此,从BaseClass中的代码,我需要调用OverClass的重写方法,而不是BaseClass的抽象/虚拟方法。

1 个答案:

答案 0 :(得分:0)

  1. 你需要专门的方法,不会过分夸大或不会被标记为抽象的具体方法。
  2. public class BaseClass{
        public abstract void method(){ return 0; }
        public void concrete(){ method(); }
    }
    
    public class OverClass : BaseClass{
        public override void method(){
            // some code
            return 2;
        }
    }    
    
    //You can call concrete like that:
    instanceOverClass.concrete();
    instanceBaseClass.conctere();
    
    1. 是。但是,只有当你将OverClass的实例装箱为BaseClass时,如果这是OverClass的实例
    2. BaseClass instanceOverClass = new OverClass();
      (OverClass)instanceOverClass.method();
      //Note that here we will call overriden method from OverClass class
      instanceOverClass.method();
      
      1. 您始终可以在代码中的任何位置调用静态方法,但是您需要记住静态方法不会通过继承传递,因此您可以调用BaseClass.method();
      2. 编辑:我想要注意这个反映不会反映,女巫会像你想要的那样做,但反射非常非常慢。