เป็นโมฆะประเภท เหตุใดในโลกจึงเป็น "โมฆะ" ประเภท? ไม่มีอินสแตนซ์ไม่มีค่าคุณไม่สามารถใช้เป็นอาร์กิวเมนต์ชนิดทั่วไปชนิดพารามิเตอร์ที่เป็นทางการชนิดโลคัลชนิดฟิลด์หรือชนิดคุณสมบัติ มันไม่มีความหมายว่าเป็นประเภท; ค่อนข้างเป็นความจริงเกี่ยวกับผลกระทบที่การเรียกใช้เมธอดมีบนสแต็กของเครื่องเสมือน แต่เครื่องเสมือนนั้นเป็นเพียง: เครื่องเสมือน เครื่องจริงจะใส่ค่าที่ส่งคืนในรีจิสเตอร์ (โดยทั่วไปคือ EAX บน x86) และไม่มีผลกับสแต็กเลย! ความว่างเปล่าเป็นประเภทเป็นเพียงความคิดที่ไม่ดีรอบ ๆ
แย่ลง: เมื่อใช้ในประเภทตัวชี้ตามที่void*
หมายถึงสิ่งที่แตกต่างอย่างสมบูรณ์กว่าสิ่งที่มันหมายถึงเมื่อใช้เป็นประเภทผลตอบแทน ตอนนี้มันหมายถึง "ตัวชี้ไปยังที่เก็บข้อมูลประเภทที่ไม่รู้จัก" ซึ่งไม่มีอะไรเกี่ยวข้องกับความหมายของมันในฐานะ "วิธีการที่ไม่คืนค่าใด ๆ "
เราสามารถเปลี่ยนเป็นชนิดชี้กับvoid*
IntPtr
(และvoid**
ด้วยIntPtr*
และต่อไปเรื่อย ๆ ) เราสามารถแทนที่โมฆะเป็นประเภทส่งคืนด้วย "หน่วย" ซึ่งเป็นประเภทที่มีค่าเดียวคือโมฆะ การนำไปใช้งานของ CLR สามารถตัดสินใจได้ว่าการเรียกใช้ฟังก์ชันที่พิมพ์หน่วยสามารถปรับการใช้งานของการลงทะเบียนหรือสแต็กอย่างเหมาะสมโดยรู้ว่า null ที่ถูก "ส่งคืน" สามารถละเว้นได้อย่างปลอดภัย
ในโลกใบนี้คุณไม่จำเป็นต้องแยกจากกันFunc<A, R>
และเป็นAction<T>
ตัวแทนอีกต่อไป เป็นเพียงAction<T>
Func<T, Unit>