Ketika saya mendeklarasikan int
sebagai nullable
int? i=null;
Apakah di i
sini menjadi tipe referensi?
Tidak, nullable adalah sebuah struct. Apa yang terjadi adalah bahwa nullable struct memiliki dua nilai:
int
untuk int?
, DateTime
untuk DateTime?
, dll.).HasValue
adalah properti.)Saat Anda menetapkan nilai tipe data, struct berubah HasValue
menjadi true.
Dari Jenis Nullable (Panduan Pemrograman C #) :
Jenis Nullable adalah contoh dari System. Struct Nullable.
dan
Tipe nullable mewakili variabel tipe-nilai yang dapat diberi nilai nol. Anda tidak dapat membuat jenis yang dapat dibatalkan berdasarkan pada jenis referensi. (Jenis referensi sudah mendukung nilai nol.)
Jadi, tidak, mereka bukan tipe referensi.
Tipe nullable bukanlah tipe nilai atau tipe referensi. Mereka lebih seperti tipe nilai, tetapi memiliki beberapa properti tipe referensi.
Secara alami, jenis yang dapat dibatalkan dapat diatur ke null
. Selain itu, tipe nullable tidak dapat memenuhi struct
batasan generik . Selain itu, saat Anda mengetikkan jenis yang dapat dibatalkan dengan yang HasValue
sama dengan false
, Anda mendapatkan null
pointer alih-alih jenis yang dapat dihapus dari kotak (situasi serupa terjadi dengan membuka kotak).
Properti ini membuat tipe nullable tipe tidak bernilai, tetapi mereka juga bukan tipe referensi. Mereka adalah tipe nilai nullable khusus mereka sendiri.
Tidak, tipe Nullable sebenarnya adalah sebuah struct. Runtime akan secara cerdas menangani pengaturan nilai nol untuk Anda, memberikan tampilan jenis referensi, ketika tidak ....
Jenis yang tidak dapat dihapus tidak dapat menjadi jenis referensi.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
sumber
Anda seharusnya tidak perlu membuat jenis referensi menjadi tipe yang dapat dibatalkan karena Anda dapat memasukkan nol sebagai gantinya.
sumber