2012-04-04 3 views
4

у меня есть общий тип, которые выглядят как этотДинамически создать переменный ток # универсального тип с самостоятельной ссылкой ограничениями

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

и мне нужно динамически построить тип T. Так что это выглядит следующим образом:

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

Можно ли это сделать?

+0

Было ли повторное использование «Т» специально? Будет ли «публичный класс MyClass: Entity {}« быть тем же? –

+0

Нет, MyClass было бы лучшим именем. –

+0

Каково было бы значение в «динамическом построении» такого производного типа, просто определяя его напрямую: public class MyEntity: Entity {} –

ответ

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

Фрагмент кода выше предполагает, что класс Entity уже определен. –

+0

Спасибо! Это именно то, что я ищу. –

+0

Я не знал, что TypeBuilder сам по себе является типом тоже! –

Смежные вопросы