Что означает «1» в именах классов, отправленных из Reflection / CodeDom / CLR? - PullRequest
0 голосов
/ 28 августа 2009

Я не могу точно вспомнить, где я видел этот странный `1 (один тик и число 1), появляющийся рядом с именами классов, но он отображается при проверке значений переменных во время отладки и совсем недавно в ответ этот вопрос .

targetClass.BaseTypes.Add(new CodeTypeReference { BaseType = "DataObjectBase`1[Refund]", Options = CodeTypeReferenceOptions.GenericTypeParameter })

Мне любопытно: откуда это и почему?

Ответы [ 2 ]

6 голосов
/ 28 августа 2009

Это универсальный тип с 1 параметром типа.

Например, List<T> - это

System.Collections.Generic.List`1

и Dictionary<TKey, TValue> - это

System.Collections.Generic.Dictionary`2

Это позволяет перегружать универсальные типы количеством параметров типа.

2 голосов
/ 28 августа 2009

Это число параметров универсального типа в CLS-совместимых именах классов. Это необходимо, потому что типы могут быть перегружены по ряду параметров; e.g.:

class Foo { }
class Foo<T1> { }
class Foo<T1, T2> { }

Чтобы различать эти случаи, компилятор генерирует следующие разные имена:

Foo
Foo`1
Foo`2  

Обратите внимание, что, хотя это требование поставщика CLS, оно не является требованием или ограничением CLR. Что касается самого CLR, универсальный тип может иметь любое имя, но никакие два типа не могут иметь одно и то же полное имя. Отсюда необходимость в схеме искажения спины.

...