การใช้งาน generic ถ้าระบุ type argument ครบจำนวนที่ประกาศไว้ในเครื่องหมาย <> เราจะเรียก type นั้นว่า closed type ถ้ามีการระบุไว้เพียงบางส่วน จะเรียกว่า structured type แต่ถ้าไม่ระบุ type argument เลยจะเรียกว่า open type
ความแตกต่างระหว่าง open และ closed type
- Open type ถือว่าเป็น type ที่ไม่สมบูรณ์ จึงไม่สามารถสร้าง instance ได้ แต่สามารถใช้เป็น input ของ operator
typeof - Close type สามารถสร้าง instance ได้เหมือนคลาสทั่วไป
ตัวอย่าง
สร้าง GenericStruct เป็น generic type ง่าย ๆ โดยมีการระบุเงื่อนไขว่า type argument ต้องเป็น value type เท่านั้น
1 | using System; |
ทดสอบ
ทดสอบว่าสามารถสร้าง instance ของ open และ closed type ผ่าน Activator.CreateInstance ได้หรือไม่
1 | public class Program { |
จากตัวอย่างจะเห็นว่าเราไม่สามารถ สร้าง instance ของ GenericStruct<> ได้ เนื่องจากไม่ระบุ type argument ไว้ในเครื่องหมาย <> ในบรรทัดที่ 14 จึงได้ open1 มีค่า null
ส่วน closed type GenericStuct<int> สามารถสร้าง instance และแสดงค่า Name ได้ปกติ