动态创建具有自引用约束的c#泛型类型

时间:2012-04-04 23:50:57

标签: c# generics reflection reflection.emit

我有一个看起来像这样的通用类型

public class Entity<T> where T : Entity<T>{ ... }

我需要动态构造类型T.所以它看起来像这样:

public class MyClass : Entity<MyClass>{ ... }

可以这样做吗?

1 个答案:

答案 0 :(得分:5)

AssemblyName assemblyName = new AssemblyName("TestAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);

ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);

TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public);

Type entityType = typeof(Entity<>).MakeGenericType(typeBuilder);

typeBuilder.SetParent(entityType);


Type t = typeBuilder.CreateType();