如何从另一个派生类对象调用派生类虚方法

时间:2013-09-23 13:17:52

标签: c# oop virtual

下面提到的情景将以良好的方式清除情况。我愿意调用xDerived1类的虚方法。虽然我能够调用xBase类方法和xDerived2类方法。

((xDerived1)xDer2).myMethod(); //覆盖void myMethod

请帮帮我。

static void Main(string[] args)
        {
            xDerived2 xDer2 = new xDerived2();
            xDer2.myMethod();
            ((xBase)xDer2).myMethod();
            ((xDerived1)xDer2).myMethod();
}


public class xBase
        {
            public virtual void myMethod()
            {
                Console.WriteLine("virtual void myMethod");
            }
        }
    public class xDerived1 :xBase
    {
        public new virtual void myMethod()
        {
            Console.WriteLine("new virtual void myMethod");
        }
    }
    public class xDerived2 : xDerived1
    {
        public override void myMethod()
        {
            Console.WriteLine("override void myMethod");
        }
    }

2 个答案:

答案 0 :(得分:1)

我得到了这个问题的解决方案,我们可以通过使用如下所述的反射来调用它:

xDerived2 child = new xDerived2();

            Action parentPrint = (Action)Activator.CreateInstance(typeof(Action), child, typeof(xDerived1).GetMethod("myMethod").MethodHandle.GetFunctionPointer());
            parentPrint.Invoke();

答案 1 :(得分:0)

根本无法从xDerived1::myMethod的实例调用xbasenew关键字会导致定义新方法,因此xDerived::myMethodxbase::myMethod完全分开。要调用该方法,您需要转到xDerived1

xbase local1 = ...;
xDerived1 local2 = local1 as xDerived;
if (local2 != null) { 
  local2.myMethod();
}