下面是一些类:
public class MyClass<T, C> : IMyClass where T : SomeTClass
where C : SomeCClass
{
private T t;
private C c;
public MyClass()
{
this.t= Activator.CreateInstance<T>();
this.c= Activator.CreateInstance<C>();
}
}
我试着实例化这个类的对象,这样做:
Type type = typeof(MyClass<,>).MakeGenericType(typeOfSomeTClass, typeOfSomeCClass);
object instance = Activator.CreateInstance(type);
所有我得到的是一个System.MissingMethodException
(没有无参数的构造函数为这个对象)…
我的代码有什么问题?
听起来像typeOfSomeTClass
或typeOfSomeCClass
是没有公共无参数构造函数的类型,如:
this.t = Activator.CreateInstance<T>();
this.c = Activator.CreateInstance<C>();
你可以通过约束来执行:
where T : SomeTClass, new()
where C : SomeCClass, new()
在这种情况下,你也可以这样做:
this.t = new T();
this.c = new C();
MakeGenericType应该在这个上下文中使用Type类型的数组。
见http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx
例如
Type = typeof(LigneGrille<,>)。MakeGenericType(new Type[] {typepeofsometclass, typepeofsomeecclass});