В обобщениях C # мы можем объявить ограничение для параметра типа, T
имеющего конструктор по умолчанию, например where T : new()
. Тем не менее, никакие другие виды ограничений, как это не действует, new(string)
например, и т. Д.
Что является причиной этого с точки зрения языкового дизайна и / или реализации?
Есть ли что-то в том, как работают конструкторы, или в том, как реализована система типов, которая запрещает это (или, по крайней мере, усложняет)? Если так, то, что это? Я помню чтение где-то, что на default(T)
самом деле компилируется new T()
для T : struct
. Возможно, это связано с этим?
Или это просто дизайнерское решение, принятое во избежание усложнения языка?
new(string)
не является ограничением конструктора по умолчанию. Ваш вопрос равносилен высказыванию "Почему нет ограничений, которые требуют определенных подписей конструктора?" Очень вероятно, потому что такое ограничение не будет особенно полезным.