Là loại tham chiếu nullable loại?


135

Khi tôi tuyên bố intlà nullable

int? i=null;

Có phải iở đây trở thành một loại tài liệu tham khảo?

Câu trả lời:


136

Không, một nullable là một cấu trúc. Điều đang xảy ra là cấu trúc nullable có hai giá trị:

  1. Giá trị của kiểu dữ liệu ( intfor int?, DateTimefor DateTime?, v.v.).
  2. Một giá trị boolean cho biết nếu giá trị loại dữ liệu đã được đặt. ( HasValuelà tài sản.)

Khi bạn đặt giá trị của kiểu dữ liệu, cấu trúc sẽ thay đổi HasValuethành true.

Các loại không thể (Hướng dẫn lập trình C #)


26

Từ các loại Nullable (Hướng dẫn lập trình C #) :

Các kiểu không thể là các thể hiện của cấu trúc System.Nullable.

Các loại không thể biểu thị các biến loại giá trị có thể được gán giá trị null. Bạn không thể tạo loại nullable dựa trên loại tham chiếu. (Các loại tham chiếu đã hỗ trợ giá trị null.)

Vì vậy, không có họ không phải là loại tham khảo.


14

Các loại không có giá trị không phải là loại giá trị cũng không phải là loại tham chiếu. Chúng giống như các loại giá trị, nhưng có một vài thuộc tính của các loại tham chiếu.

Đương nhiên, các loại nullable có thể được đặt thành null. Hơn nữa, một loại nullable không thể đáp ứng một structràng buộc chung . Ngoài ra, khi bạn đóng hộp một loại nullable HasValuebằng false, bạn sẽ có một nullcon trỏ thay vì loại nullable được đóng hộp (một tình huống tương tự tồn tại với unboxing).

Các thuộc tính này tạo ra các loại không có giá trị loại không có giá trị, nhưng chúng chắc chắn không phải là loại tham chiếu. Họ là loại giá trị nullable đặc biệt của riêng họ.


6

Không, loại Nullable trên thực tế là một cấu trúc. Thời gian chạy sẽ xử lý thông minh cài đặt giá trị null cho bạn, tạo ra sự xuất hiện của loại tham chiếu, khi nó không ....


2
Tôi truy vấn 'xử lý thông minh', khá chủ quan. Cá nhân tôi thấy hành vi khó hiểu và thường gây phiền nhiễu.
nicodemus13


0

Bạn không cần phải biến loại tham chiếu thành loại không có giá trị vì bạn có thể chuyển null vào vị trí của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.