使用c#中的父类反射检索子类

时间:2010-11-10 17:49:52

标签: c# reflection

在以下代码中:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyChild x = new MyChild();
            System.Console.ReadKey();
        }
    }

    class MyParent
    {
        protected static void TestFunction()
        {
            System.Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }
    }

    class MyChild : MyParent
    {
        public MyChild()
        {
            TestFunction();
        }
    }
}

我希望静态方法输出“ConsoleApplication1.MyChild”,因为那是调用类型。这可能吗?我无法在反射物体的任何地方找到它。

1 个答案:

答案 0 :(得分:2)

您不能使用静态方法执行此操作,因为您不是真正MyChild的实例上调用它。永远只会在MyParent上调用它。

请注意,如果您使方法非静态,这可能甚至不起作用,因为您询问声明正在执行的方法的类型,实际上是父类(子类) class没有声明方法,它只是继承它。)

但是,如果您将该方法设为非静态方法,则可以访问GetType()实例方法,该方法将返回您所需的类型。