我可以通过其子类的实例访问基类的虚方法吗?

时间:2017-06-06 22:53:40

标签: c#

我有一个子类,它在其基类中覆盖了一个抽象的虚方法。 我可以通过子类实例访问基类的虚方法吗?

感谢。

例如

public abstract class BaseClass{
    public virtual void MyMethod(){...}
} 

public Class SubClass{
    public override void MyMethod(){...}
} 

public static void Main(string[] args)
{
    SubClass MyObject = new SubClass();
    MyObject.MyMethod(); // need a way to refer to BaseClass.MyMethod, instead of SubClass.MyMethod().
}

2 个答案:

答案 0 :(得分:1)

是。

public class SubClass : BaseClass
{
    public override void MyMethod()
    {
        base.MyMethod();
    }
} 

答案 1 :(得分:1)

不,没有合理的方法从类外部调用基本虚拟方法。

如果控制派生类,最简单的方法是通过其他方法公开base.MyMethod。如果你不能改变派生类,我认为你运气不好。

即使您可以尝试通过反射获取精确方法并使用给定实例调用它,它仍将对派生方法执行虚拟调用。

var d = new SubClass();
var m = typeof(BaseClass).GetMethod("MyMethod");
m.Invoke(d, new object[0]); // calls SubClass.MyMethod