2010-03-16 12 views
5

¿Cómo puedo generar tipos como estos usando las bibliotecas System.Reflection.Emit:¿Cómo puedo definir varios tipos con el mismo nombre y diferentes parámetros de tipo usando Reflection Emit?

public class Test<T> {} 
public class Test<T1, T2> {} 

Cuando llamo ModuleBuilder.DefineType (cadena) con la segunda declaración de tipo, que recibo una excepción porque ya existe otro tipo en el módulo con el mismo nombre (ya he definido el parámetro de tipo en el primer tipo). ¿Algunas ideas?

Respuesta

3

Debe evitar el conflicto de la misma manera que lo hacen C# y VB.Net. Al emitir un nombre de tipo genérico, agregue un símbolo `y el número de parámetros genéricos. Por ejemplo, los siguientes nombres de tipo consigue realmente generados por los anteriores

class Test`1 // Test<T> 
class Test`2 // Test<T1,T2> 

Puede ver el nombre de mangling en el BCL con reflector. Establezca el idioma en IL en lugar de C# y mostrará los nombres reales del tipo como se emiten en los metadatos en lugar del nombre del lenguaje embellecido.

+0

Funcionó perfectamente. ¡Gracias por tu respuesta! –

Cuestiones relacionadas