Это арность (или количество) общих c аргументов.
Причина в том, что у вас может быть несколько классов с тем же именем, но с разными количество общих c параметров. Например:
class Foo {}
class Foo<TKey> {}
class Foo<TKey, TValue> {}
Чтобы различать их, среда CLR определяет правило, согласно которому общие c типы имеют суффикс с количеством принимаемых общих c аргументов. Типы non generi c этого не требуют, поэтому их имена кодируются как:
Foo
Foo`1
Foo`2
Есть и другие символы "magi c". Например, +
в имени используется для обозначения внутреннего / вложенного класса. Итак:
class Foo
{
class Bar
{
}
}
В результате Bar
будет закодирован как Foo+Bar
.