ใน C # generics เราสามารถประกาศข้อ จำกัด สำหรับพารามิเตอร์ชนิดจะมีคอนสตรัคเริ่มต้นด้วยการพูดว่าT
where T : new()
อย่างไรก็ตามไม่มีข้อ จำกัด อื่น ๆ เช่นนี้ที่ถูกต้อง - new(string)
ตัวอย่างเช่น ฯลฯ
จากมุมมองของการออกแบบภาษาและ / หรือการนำไปใช้งานอะไรคือสาเหตุของสิ่งนี้?
มีบางอย่างในการทำงานของคอนสตรัคเตอร์หรือวิธีการใช้งานระบบพิมพ์ที่ห้ามสิ่งนี้ (หรืออย่างน้อยก็ทำให้ยากขึ้น)? ถ้าเป็นเช่นนั้นมันคืออะไร? ผมจำได้อ่านบางที่default(T)
จริงคอมไพล์สำหรับnew T()
T : struct
มันเกี่ยวข้องกับสิ่งนี้หรือเปล่า?
หรือเป็นเพียงการตัดสินใจออกแบบเพื่อหลีกเลี่ยงการทำให้ภาษาซับซ้อนเกินไป?
new(string)
ไม่ใช่ข้อ จำกัด ของตัวสร้างเริ่มต้น คำถามของคุณมีค่าเท่ากับการพูดว่า "ทำไมจึงไม่มีข้อ จำกัด ที่ต้องมีลายเซ็นคอนสตรัคเตอร์เฉพาะ" มีโอกาสมากเพราะข้อ จำกัด ดังกล่าวจะไม่มีประโยชน์อย่างยิ่ง