Ответ 1
Типы с тем же именем, но с другим числом параметров типового типа (включая ноль) - это просто разные типы. Термин "перегрузка" здесь не применяется. Перегрузка действительно применима только к методам того же типа и имеет одно и то же имя, но разные подписи.
Очень часто имеет общий и не общий интерфейс с тем же именем (пример из библиотеки.NET):
public interface IList : ICollection, IEnumerable
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
Они просто называются родовыми и неэквивалентными.
Имя.NET-типа общего типа - это имя типа, заканчивающегося серьезным акцентом (`) и количеством параметров типа. Например, тип IMyType<T>
в С# или IMyType(Of T)
в VB переводится на
IMyType'1
внутренне. <T>
на самом деле просто синтаксическая конструкция С#, которая переводится во внутреннее имя.NET, используемое CLR.
IMyType<T,U>
будет переведен на
IMyType'2
Это ясно показывает, что типы с одним и тем же именем в С#, отличающиеся только их количеством параметров типового типа, относятся к типам реализаций (CLR-) с разными именами.