Rushui Guan
Rushui Guan

Reputation: 3163

Dynamically create a c# generic type with self referenced constraints

I have a generic type that look like this

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

and I need to dynamically construct the type T. So that it looks like this:

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

Can this be done ?

Upvotes: 5

Views: 606

Answers (1)

Joe Enzminger
Joe Enzminger

Reputation: 11190

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();

Upvotes: 6

Related Questions