c#构造函数通过反射获取'base'部分

Posted

技术标签:

【中文标题】c#构造函数通过反射获取\'base\'部分【英文标题】:c# constructor get 'base' part with reflectionc#构造函数通过反射获取'base'部分 【发布时间】:2021-10-05 06:13:46 【问题描述】:

我目前正在尝试解析一些随机 dll 的公共成员,我被困在使用反射获取构造函数的基础部分

public class MyClass: MySuperClass
 
   public MyClass(Color color1, Color color2)
          : base(0.0f, 0.0f, 0.0f, 0.0f, color1, color2)
        
           //...
        
  

从类型我知道如何获取构造函数和参数,但不是对父类构造函数的调用':base(0.0f,0.0f,0.0f,0.0f,color1,color2)'

var MyType = typeof(MyClass);
foreach (ConstructorInfo MyConstructor in MyType.GetConstructors())

     var MyParameters = MyConstructor.GetParameters();

     //todo get base parameters ': base(0.0f, 0.0f, 0.0f, 0.0f, color1, color2)' ? 

你知道是否有办法获取父构造函数调用中使用的参数/值列表吗?

【问题讨论】:

我认为这是不可能的。反射让您了解课程的表面。基类调用或在其他情况下对同一类的其他构造函数的调用是构造函数方法的已实现主体的一部分。因此,您需要检查生成的 IL 代码以查看是否以及如何调用不同的方法。 如果不反编译 CIL 主体,您将无法执行此操作。另外请注意,不仅可以调用基础构造函数。 谢谢大家的回复,我去看看这个方法,看看能不能搞到什么 【参考方案1】:

您可以进入BaseType 并查看父类的构造函数,而不是进入MyClass 的类型:

Type mySuperClassType = typeof(MyClass).BaseType;
        foreach (ConstructorInfo MyConstructor in mySuperClassType.GetConstructors())
        
            var MyParameters = MyConstructor.GetParameters();
            Console.WriteLine(MyConstructor.ToString());
            // prints Void .ctor(Single, Single, Single, Single, System.Drawing.Color, System.Drawing.Color) 
        

这里的工作示例:https://dotnetfiddle.net/S7CFT0

【讨论】:

这不能回答 OP 的问题

以上是关于c#构造函数通过反射获取'base'部分的主要内容,如果未能解决你的问题,请参考以下文章

使用反射从抽象基类访问构造函数

c# -反射获取自定义特性

C#中子类构造函数中如何调用父类构造函数

Java通过反射获取带参数构造方法并使用

c#学习-base和this在构造函数中的应用

C# base() 构造函数顺序[重复]