在下面的代码中:
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()
实例方法,该方法将准确返回您想要的类型。
关于c# - 在 C# 中,通过父类的反射检索子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147408/