【发布时间】:2010-09-20 22:26:34
【问题描述】:
标题有点晦涩。我想知道的是这是否可能:
string typeName = <read type name from somwhere>;
Type myType = Type.GetType(typeName);
MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>();
显然,MyGenericClass 被描述为:
public class MyGenericClass<T>
现在,编译器抱怨“找不到类型或命名空间 'myType'。”必须有办法做到这一点。
【问题讨论】:
-
泛型 != 模板。所有泛型类型变量都在编译时解析,而不是在运行时解析。这是 4.0 的“动态”类型可能有用的情况之一。
-
@Will - 以什么方式?当与泛型一起使用时,在当前的 CTP 下,您基本上最终会调用
-
@MarcGravell 您可以使用
foo.Method((dynamic)myGenericClass)进行运行时方法绑定,有效地为类型的方法重载提供服务定位器模式。 -
@ChrisMarisic 是的,对于一些通用的
public void Method<T>(T obj)- 自那条评论以来的过去 6 年里,我已经多次使用过这个技巧;p -
@MarcGravell 有没有办法修改它,以便方法实例化它?