Ответ 1
Поскольку скобки <>
- это синтаксис С#. Реализация System.Object.ToString()
возвращает имя типа с синтаксисом CLR.
Рассмотрим это:
System.Collections.Generic.List<System.String>
Выглядит хорошо, когда вы развиваетесь в С#, но говорите, что вы вызываете ToString
из С++/CLI. Вы ожидали бы вместо этого следующего?
System::Collections::Generic::List<System::String>
Очевидно, что поведение не должно меняться в зависимости от того, на каком языке был скомпилирован вызывающий, поэтому возвращаемая строка нечувствительна к языку.
На этой странице MSDN перечислены соглашения об именах типов, используемые CLR. (Спасибо Мэтью Уотсон за ссылку).
Что касается arity (часть `1
), вы можете найти дополнительную информацию в ECMA-335 (спецификация CLI):
I.10.7.2 Имена типов и кодировка arity
Стандартные имена типа CLS кодируются с использованием формата
name[`arity]
, где[...]
указывает, что символ серьезного акцента`
и arity вместе являются необязательными. Закодированное имя должно следовать следующим правилам:
- name должен быть идентификатором (см. раздел II), который не содержит символ
`
.- arity указывается как беззнаковое десятичное число без начальных нулей или пробелов.
- Для обычного общего типа arity - это количество параметров типа, объявленных в типе.
- Для вложенного родового типа arity - это количество вновь введенных параметров типа.