c# - 在 C# 中,通过父类的反射检索子类

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

最佳答案

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

请注意,如果您将方法设置为非静态,这可能甚至无法工作,因为您询问的是什么类型声明正在执行的方法,它实际上是父类(子类类不声明方法,它只是继承它)。

但是,如果您使该方法成为非静态方法,您将可以访问 GetType() 实例方法,该方法将准确返回您想要的类型。

关于c# - 在 C# 中,通过父类的反射检索子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147408/

相关文章:

c# - 为什么 cmd.executeNonQuery() 抛出 ManagedDataAccess.Client.OracleException?

c# - 线程和 session 对 asp.net c# 中的 paypal 机制的影响应该是什么

c# - Lambda 表达式未按预期运行

java - 关于通过java实现的反射的工厂设计模式

C# 使用反射设置 Dictionary<String, Object> 值

c# - 当 UI 元素绑定(bind)到命令时,如何使用 StringFormat 去除 InputGesture 文本?

c# - 如何设置机箱风扇速度

java - 使用方法句柄转发对功能接口(interface)的调用

java、反射、性能等

java - 使用反射使用Calendar类的常量来添加月份