Поскольку сам тип - List<T>
является универсальным, вы можете использовать универсальный аргумент T
в конструкторе. Например, List<T>
имеет этот конструктор:
public List (System.Collections.Generic.IEnumerable<T> collection);
Но независимо от того, какой универсальный тип используется, когда мы вызываем этот конструктор ...
var stringList = new List<string>(arrayOfStrings collection);
var intList = new List<int>(listOfInt collection);
... сам конструктор не должен быть универсальным, то есть ему не нужно иметь аргумент универсального типа. Мы указываем это при создании объекта.
Если бы нам пришлось снова включить обобщенные аргументы в конструктор, как это ...
public List<T>();
public List<T>(System.Collections.Generic.IEnumerable<T> collection);
... это не добавит никакой новой информации.
Что если бы мы создавали новый класс и поняли, что нам нужно добавить общие аргументы? У нас могут быть конструкторы, которые не имеют ничего общего с этими общими аргументами, например:
public class SomeGenericClass<T, T2>
{
SomeGenericClass(int value)
{ /// }
SomeGenericClass(string somethingElse)
{ /// }
}
Нам бы все равно пришлось изменить все конструкторы, что было бы бессмысленно, поскольку сами конструкторы не меняются.