2012-04-04 12 views
4

Ich habe einen generischen Typen, dieDynamisch aC# generischen Typen mit selbst referenzierten Einschränkungen

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

wie diese aussehen zu schaffen und ich brauche, um dynamisch den Typen T konstruiert also, dass sie wie folgt aussieht:

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

Kann dies getan werden?

+0

War die Wiederverwendung von "T" absichtlich? Würde "öffentliche Klasse MyClass: Entity {}" dasselbe sein? –

+0

Nein, MyClass wäre ein besserer Name gewesen. –

+0

Was wäre der Wert in "dynamic constructing" so einen abgeleiteten Typ über einfach direkt zu definieren: public class MyEntity: Entity {} –

Antwort

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

Code-Schnipsel oben nimmt an, dass die Klasse bereits definiert ist. –

+0

Danke! Genau das suche ich. –

+0

Ich wusste nicht, TypeBuilder selbst ist eigentlich ein Typ zu! –

Verwandte Themen