ปัญหาพื้นฐานกับ "โมฆะ" คือมันไม่ได้หมายความว่าสิ่งเดียวกันกับประเภทผลตอบแทนอื่น ๆ "void" หมายถึง "ถ้าวิธีนี้คืนค่ามันจะคืนค่าใด ๆ " ไม่เป็นโมฆะ; null เป็นค่า มันจะไม่ส่งกลับค่าใด ๆ
สิ่งนี้จะทำให้ระบบการพิมพ์สับสน ประเภทของระบบเป็นหลักระบบสำหรับการหักลอจิคัลเกี่ยวกับการดำเนินงานที่ถูกต้องในค่าเฉพาะ; วิธีการคืนค่าเป็นโมฆะไม่ส่งคืนค่าดังนั้นคำถาม "การดำเนินการใดที่ใช้ได้กับสิ่งนี้" ไม่สมเหตุสมผลเลย ไม่มี "สิ่ง" สำหรับการดำเนินการที่ถูกต้องหรือไม่ถูกต้อง
ยิ่งไปกว่านั้นสิ่งนี้จะทำให้บางสิ่งบางอย่างดุร้ายขึ้น รันไทม์. NET คือการนำระบบปฏิบัติงานเสมือนมาใช้ซึ่งระบุว่าเป็นเครื่องซ้อน นั่นคือเครื่องเสมือนที่มีการดำเนินการทั้งหมดในแง่ของผลกระทบต่อกองการประเมินผล (แน่นอนในทางปฏิบัติเครื่องจะถูกนำไปใช้กับเครื่องที่มีทั้งสแต็กและรีจิสเตอร์ แต่ระบบปฏิบัติการเสมือนถือว่าเป็นเพียงสแต็ก) ผลของการเรียกใช้วิธีการโมฆะนั้นเป็นพื้นฐานแตกต่างจากผลกระทบของการเรียกไปยังวิธีการไม่เป็นโมฆะ; วิธีการที่ไม่เป็นโมฆะมักจะวางบางสิ่งบางอย่างบนสแต็กซึ่งอาจต้องมีการเปิดออก วิธีการโมฆะไม่เคยใส่อะไรในกอง และดังนั้นคอมไพเลอร์ไม่สามารถรักษาโมฆะและวิธีที่ไม่เป็นโมฆะเหมือนกันในกรณีที่ค่าส่งคืนของวิธีการจะถูกละเว้น; หากวิธีการนั้นเป็นโมฆะก็จะไม่มีค่าตอบแทนดังนั้นจะต้องไม่มีป๊อป
ด้วยเหตุผลเหล่านี้ "โมฆะ" ไม่ใช่ประเภทที่สามารถสร้างอินสแตนซ์ได้ มันไม่มีค่านั่นคือประเด็นทั้งหมด มันไม่สามารถแปลงเป็นวัตถุและวิธีการคืนค่าเป็นโมฆะไม่เคยได้รับการปฏิบัติ polymorphically ด้วยวิธีการไม่กลับเป็นโมฆะเพราะการทำเช่นนั้นจะทำลายกอง!
ดังนั้นโมฆะไม่สามารถใช้เป็นอาร์กิวเมนต์ชนิดซึ่งเป็นความอัปยศตามที่คุณทราบ มันจะสะดวกมาก
ด้วยประโยชน์ของการเข้าใจถึงปัญหาหลังเหตุการณ์มันจะดีกว่าสำหรับทุกคนที่เกี่ยวข้องหากไม่มีอะไรเลยวิธีการคืนค่าเป็นโมฆะจะส่งคืน "หน่วย" ซึ่งเป็นประเภทอ้างอิงเดี่ยวที่มีมนต์ขลังโดยอัตโนมัติ จากนั้นคุณจะรู้ว่าการเรียกใช้เมธอดทุกวิธีทำให้บางสิ่งบางอย่างบนสแต็กคุณจะรู้ว่าการเรียกเมธอดทุกวิธีส่งคืนสิ่งที่สามารถกำหนดให้กับตัวแปรชนิดของวัตถุและแน่นอนว่าหน่วยสามารถใช้เป็นอาร์กิวเมนต์ชนิดได้ ไม่จำเป็นต้องมีประเภทผู้แทน Action และ Func แยกกัน น่าเศร้าที่ไม่ใช่โลกที่เราอยู่
สำหรับความคิดเพิ่มเติมในหลอดเลือดดำนี้ดู: