У C # generics ми можемо оголосити обмеження для параметра типу, T
щоб мати конструктор за замовчуванням, сказавши where T : new()
. Однак ніякі інші види таких обмежень не є дійсними - new(string)
наприклад, тощо.
Що з мовної розробки та / або впровадження, що є причиною цього?
Чи є щось у тому, як працюють конструктори чи в тому, як реалізується система типів, що забороняє це (або принаймні ускладнює)? Якщо так, то що це? Пригадую, я читав десь, що default(T)
насправді збирається new T()
для T : struct
. Чи пов’язано це з цим, можливо?
Або це просто дизайнерське рішення, прийняте для того, щоб уникнути ускладнення мови?
new(string)
не є обмеженням конструктора за замовчуванням. Ваше запитання рівнозначне: "Чому не існує обмежень, які вимагають конкретних підписів конструктора?" Дуже ймовірно, оскільки таке обмеження не було б особливо корисним.