使用反射为泛型类创建构造函数

Posted

技术标签:

【中文标题】使用反射为泛型类创建构造函数【英文标题】:Create constructor for generic class using reflection 【发布时间】:2011-12-04 16:14:16 【问题描述】:

我想为泛型类创建一个使用反射的类。 谁能告诉我如何创建它?

我有

public class SomeClass<T>

  ....

我需要使用反射为SomeClass&lt;T&gt; 创建一个类。

【问题讨论】:

【参考方案1】:

使用MakeGenericType方法:

Type myParameterizedSomeClass = typeof(SomeClass<>).MakeGenericType(typeof(MyParameter));
ConstructorInfo constr = myParameterizedSomeClass.GetConstructor(typeof(ConstrParamType1),typeof(ConstrParamType2));

【讨论】:

谢谢,我在 C#.2.0 版本中被标记了这个。有可能吗? @Raj 我有理由肯定它是。你试过了吗? @Raj 你试过更新的答案了吗?它应该在 C#2.0 中工作。【参考方案2】:

您是否需要在运行时使用创建新类的反射来实例化现有类? 如果是前者:

Class<?> c = Class.forName("SomeClass");
SomeClass<String> sc =  (SomeClass<String>)c.newInstance();

如果是后者,请查看Javassist。没试过,但看起来很容易使用。 我假设您使用的是 Java。

【讨论】:

没有。它被标记为 c#

以上是关于使用反射为泛型类创建构造函数的主要内容,如果未能解决你的问题,请参考以下文章

在Java泛型类中,在构造函数级别添加额外的通用约束?

c#中泛型类构造函数重载赋值时为啥不接受null?对其赋空值应给怎么做?

Kotlin泛型 ① ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )

C# 泛型类 构造方法中实例化T

Java泛型方法和构造函数

Java:使用具有泛型构造函数的构建模式时“无法解析方法”