Tôi biết rằng có thể có các loại giá trị Nullable kết thúc tốt kiểu giá trị và cung cấp khả năng lưu trữ null. Nhưng có lý do kỹ thuật nào không cho phép loại giá trị là không hoặc lý do chỉ là khái niệm?Tại sao các loại giá trị không thể là rỗng
Trả lời
Loại tham chiếu được lưu dưới dạng tham chiếu (như con trỏ) cho một đối tượng đối tượng.
null
có nghĩa là tham chiếu không trỏ đến một thể hiện của đối tượng.
Loại giá trị được lưu trữ dưới dạng giá trị mà không có bất kỳ tham chiếu nào.
Do đó, không có ý nghĩa khi có một kiểu giá trị null
— loại giá trị theo định nghĩa chứa một giá trị.
Nullable<T>
là loại giá trị có cờ HasValue
có thể là false
để cho biết rằng không có giá trị. Giá trị này vẫn có giá trị (khi HasValue
là false
, Value
là default(T)
), nhưng cờ HasValue
cho bạn biết bỏ qua giá trị.
Không có gì để làm với null
, ngoại trừ CLR tự động mở hộp số null
được đóng hộp thành Nullable<T>
với HasValue
được đặt thành false
.
Loại giá trị như 'Int32' được lưu trữ bằng cách sử dụng ba mươi hai bit dung lượng lưu trữ. Có chính xác 4,294,967,296 giá trị có thể được đại diện bởi 32 bit, và Int32 có thể chứa 4,294,967,296 giá trị khác nhau. Nếu -2,147,483,648 không phải là giá trị Int32 hợp lệ, nó có thể có thể sử dụng để đại diện cho "null", nhưng thực tế là biểu diễn nhị phân của nó không phải là tất cả các số không sẽ làm phức tạp mọi thứ. Ngược lại, số lượng các kết hợp bit có thể có trong một loại tham chiếu vượt quá số lượng các tham chiếu hợp lệ có thể có, do đó không khó để đặt trước một kết hợp bit để biểu diễn "null".
Bất kỳ tham chiếu nào (bài viết) về những gì bạn đang giải thích? Tôi vẫn chưa rõ về ý tưởng bạn đặt. – Marshal
chúng tôi có thể tạo các biến nullable bằng cách sử dụng? nhà điều hành. ví dụ, int? x = null; – Shekhar
@Shekhar: Anh ấy nhận ra điều đó. Nó không liên quan gì đến 'null'. – SLaks
cảm ơn bạn đã giải thích. – Shekhar