เมื่อฉันประกาศint
ว่าเป็นโมฆะ
int? i=null;
ไม่i
นี่กลายเป็นชนิดการอ้างอิงหรือไม่?
เมื่อฉันประกาศint
ว่าเป็นโมฆะ
int? i=null;
ไม่i
นี่กลายเป็นชนิดการอ้างอิงหรือไม่?
คำตอบ:
ไม่ nullable เป็นโครงสร้าง สิ่งที่เกิดขึ้นคือโครงสร้างที่ว่างเปล่ามีสองค่า:
int
สำหรับint?
, DateTime
สำหรับDateTime?
ฯลฯ )HasValue
คือคุณสมบัติ)เมื่อคุณตั้งค่าของชนิดข้อมูลโครงสร้างHasValue
จะเปลี่ยนเป็นจริง
จากประเภท Nullable (คู่มือการเขียนโปรแกรม C #) :
ประเภท Nullable คืออินสแตนซ์ของ System.Nullable struct
และ
ประเภท Nullable แสดงถึงตัวแปรประเภทค่าที่สามารถกำหนดค่าของ null ได้ คุณไม่สามารถสร้างประเภทที่เป็นโมฆะได้ตามประเภทการอ้างอิง (ประเภทการอ้างอิงรองรับค่า null แล้ว)
ดังนั้นจึงไม่ใช่ประเภทอ้างอิง
ประเภท Nullable ไม่ใช่ประเภทค่าหรือประเภทอ้างอิง คล้ายกับประเภทค่ามากกว่า แต่มีคุณสมบัติบางอย่างของประเภทการอ้างอิง
ธรรมชาติประเภท nullable null
อาจจะกำหนดให้ นอกจากนี้ประเภทที่เป็นโมฆะไม่สามารถตอบสนองstruct
ข้อ จำกัดทั่วไปได้ นอกจากนี้เมื่อคุณใส่กล่องประเภทที่เป็นโมฆะด้วยHasValue
เท่ากับfalse
คุณจะได้null
ตัวชี้แทนชนิดที่ว่างเปล่าแบบบรรจุกล่อง (มีสถานการณ์ที่คล้ายกันกับการแกะกล่อง)
คุณสมบัติเหล่านี้ทำให้เป็นประเภทที่ไม่ใช่ค่าประเภทที่เป็นค่าว่างได้ แต่แน่ใจว่าไม่ใช่ประเภทการอ้างอิงเช่นกัน เป็นประเภทค่าว่างพิเศษของตัวเอง
ไม่ประเภท Nullable เป็นโครงสร้าง รันไทม์จะจัดการการตั้งค่าของค่าว่างให้คุณอย่างชาญฉลาดโดยให้ลักษณะของประเภทการอ้างอิงเมื่อมันไม่ใช่ ....
ประเภท Nullable ไม่สามารถอ้างอิงได้
คุณไม่จำเป็นต้องทำให้ประเภทการอ้างอิงเป็นประเภทที่ว่างเปล่าเนื่องจากคุณสามารถส่งค่าว่างแทนได้