Dalam C # generics, kita dapat mendeklarasikan batasan untuk tipe parameter T
untuk memiliki konstruktor default, dengan mengatakan where T : new()
. Namun, tidak ada kendala lain seperti ini yang valid - new(string)
misalnya, dll.
Dari desain bahasa dan / atau perspektif implementasi, apa alasannya?
Apakah ada sesuatu dalam cara konstruktor bekerja atau dalam cara sistem tipe diimplementasikan yang melarang ini (atau setidaknya membuatnya lebih sulit)? Jika demikian, apakah itu? Saya ingat pernah membaca di suatu tempat yang default(T)
sebenarnya cocok new T()
untuk T : struct
. Apakah ini terkait dengan ini, mungkin?
Atau itu hanya keputusan desain yang dibuat untuk menghindari membuat bahasa terlalu rumit?
new(string)
bukan kendala konstruktor default. Pertanyaan Anda sama saja dengan mengatakan "Mengapa tidak ada kendala yang memerlukan tanda tangan konstruktor tertentu?" Sangat mungkin karena kendala seperti itu tidak akan terlalu berguna.