在下面的代码中:

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”,因为这是调用类型。这可能吗?我在反射对象的任何地方都找不到它。

最佳答案

您不能使用静态方法执行此操作,因为您实际上并未在MyChild实例上调用它。永远只能在MyParent上调用它。

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

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

09-13 10:33