在下面的代码中:
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()
实例方法,该方法将完全返回所需的类型。