คำถามนี้เป็นเรื่องของบล็อกของฉันบน 30 พฤษภาคม 2013 ขอบคุณสำหรับคำถามดีๆ!
คุณกำลังมองไปที่ถนนรถแล่นที่ว่างเปล่า
มีคนถามคุณว่า "รถแล่นของคุณมี Honda Civic ได้ไหม"
ใช่. ใช่มันทำได้
มีคนชี้คุณไปที่ถนนที่สอง มันยังว่างเปล่า พวกเขาถามว่า "เนื้อหาปัจจุบันของถนนรถแล่นของฉันพอดีกับถนนรถแล่นของคุณได้ไหม"
ใช่แน่นอน ถนนทั้งสองว่างเปล่า! เห็นได้ชัดว่าเนื้อหาของหนึ่งสามารถใส่เข้าไปในอีกอันหนึ่งได้เนื่องจากไม่มีเนื้อหาใด ๆ ในตอนแรก
มีคนถามคุณว่า "ถนนของคุณมี Honda Civic หรือไม่"
ไม่มันไม่ได้
คุณกำลังคิดว่าisโอเปอเรเตอร์ตอบคำถามที่สองเมื่อได้รับค่านี้แล้วมันพอดีกับตัวแปรประเภทนั้นหรือไม่? การอ้างอิงค่าว่างพอดีกับตัวแปรประเภทนี้หรือไม่ ใช่.
นั่นไม่ใช่คำถามที่isโอเปอเรเตอร์ตอบ คำถามที่isผู้ดำเนินการตอบคือคำถามที่สาม y is Xไม่ได้ถามว่า " เป็นyค่าทางกฎหมายของตัวแปรประเภทX? " มันถามว่า " คือyการอ้างอิงที่ถูกต้องเพื่อวัตถุประสงค์ของการพิมพ์X? " ตั้งแต่อ้างอิงโมฆะไม่ใช่การอ้างอิงที่ถูกต้องใด ๆของวัตถุใด ๆประเภทคำตอบคือ "ไม่ ". ถนนรถแล่นนั้นว่างเปล่า มันไม่มี Honda Civic
อีกวิธีในการดูคือy is Xตอบคำถาม "ถ้าฉันพูดy as Xไปฉันจะได้ผลลัพธ์ที่ไม่เป็นโมฆะหรือไม่ถ้า y เป็นโมฆะคำตอบคือไม่!
หากต้องการดูคำถามของคุณให้ลึกซึ้งยิ่งขึ้น:
เราคาดหวังว่าค่า null เป็นของประเภทการอ้างอิงใด ๆ (หรือ nullable)
โดยปริยายจะถือว่าประเภทหนึ่งคือชุดของค่าและความเข้ากันได้ของการกำหนดค่า y กับตัวแปรประเภท X นั้นไม่มีอะไรมากไปกว่าการตรวจสอบว่า y เป็นสมาชิกของเซต xหรือไม่
แม้ว่านั่นจะเป็นวิธีที่ใช้กันทั่วไปในการดูประเภท แต่นั่นไม่ใช่วิธีเดียวในการดูประเภทและไม่ใช่วิธีที่ C # ดูประเภท การอ้างอิง Null เป็นสมาชิกที่ไม่มีประเภทใน C #; ความเข้ากันได้รับมอบหมายจะไม่ได้เป็นเพียงการตรวจสอบชุดเพื่อดูว่ามันมีค่า เพียงเพราะการอ้างอิงที่เป็นโมฆะเป็นการกำหนดที่เข้ากันได้กับตัวแปรของการอ้างอิงประเภท X ไม่ได้หมายความว่า null เป็นสมาชิกของประเภท X ความสัมพันธ์ "คือการกำหนดที่เข้ากันได้กับความสัมพันธ์" และความสัมพันธ์ "เป็นสมาชิกประเภท" เห็นได้ชัดว่ามีจำนวน ทับซ้อนกัน แต่ไม่เหมือนกันใน CLR
หากความคิดเกี่ยวกับทฤษฎีประเภทที่คุณสนใจโปรดดูบทความล่าสุดของฉันในหัวข้อ:
สิ่งนี้ที่คุณเรียกว่า "ประเภท" คืออะไร? ส่วนที่หนึ่ง
สิ่งนี้ที่คุณเรียกว่า "ประเภท" คืออะไร? ส่วนที่สอง