Как я могу определить несколько типов с одинаковыми именами и параметрами разных типов, используя Reflection Emit? - PullRequest
5 голосов
/ 16 марта 2010

Как я могу генерировать такие типы, используя библиотеки System.Reflection.Emit:

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

Когда я вызываю ModuleBuilder.DefineType (string) со вторым объявлением типа, я получаю исключение, потому что в модуле с таким именем уже есть другой тип (я уже определил параметр типа для первого типа). Есть идеи?

1 Ответ

3 голосов
/ 16 марта 2010

Вам следует избегать конфликта так же, как это делают C # и VB.Net. При передаче имени универсального типа добавьте символ `и число универсальных параметров. Например, следующие имена типов фактически генерируются для вышеуказанного

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

Вы можете просмотреть это искажение имени в BCL с отражателем. Установите язык на IL вместо C #, и он будет отображать фактические имена типов, которые выводятся в метаданных, вместо предварительно подтвержденного имени языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...