在以下代码中:
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”,因为那是调用类型。这可能吗?我无法在反射物体的任何地方找到它。
答案 0 :(得分:2)
您不能使用静态方法执行此操作,因为您不是真正在MyChild
的实例上调用它。永远只会在MyParent
上调用它。
请注意,如果您使方法非静态,这可能甚至不起作用,因为您询问声明正在执行的方法的类型,实际上是父类(子类) class没有声明方法,它只是继承它。)
但是,如果您将该方法设为非静态方法,则可以访问GetType()
实例方法,该方法将返回您所需的类型。