2017-06-06 72 views
-1

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

谢谢。

例如

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(). 
} 
+1

如果这是您的用例,重写SubClass中的方法是没有意义的。 –

+0

我没有写两个类。 – Tim

+1

如果你自己的代码我个人变化,由于糟糕的对象设计,但如果你坚持,你可以做一些疯狂的东西仍然执行它,看看这个 - https://stackoverflow.com/a/14415506/4079967 –

回答

1

是。

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

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

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

即使你可以尝试通过反射来获取精确的方法,并与给定的实例调用它,它仍然会执行派生方法虚拟呼叫。

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

(不太合理的方式是在https://stackoverflow.com/questions/4357729/use-reflection-to-invoke-an-overridden-base-method可用 - 谢谢[凯文·史密斯(https://stackoverflow.com/用户/ 4079967/kevin-smith)链接 - 关闭为dup) –

相关问题