2011-08-06 11 views
7

C# 'da yeniyim ve nesnelerin C#' de sıfır olabileceğini öğrendim ancak int yapamıyorum.Neden int null olamaz? N # n nl ile int (int?) C# içinde nasıl çalışır?

Ayrıca nasıl oluyor C# null int (int?) çalışacak mı?

+3

C# 'da iyi bir kitaba yatırım yapardım. Bunun gibi temel sözdizimi ile ilgili çok fazla soru sormak zorundasınız ve SO üzerinde bireysel olarak sormak çok zaman alacaktır. –

+0

http://stackoverflow.com/questions/6191339/why-type-int-is-never-equal-to-null – Bart

+1

@Bart: Gördüğüm o ki, bir jleedevin bir kopyası olarak kapatıldı, ama bu soru C# ile null değer değerlerine çok daha özgüdür ... – BoltClock

cevap

1

Nesneler referans türleridir ve onlar hiçbir şey NULL başvurabilir, ancak int yalnızca bir değeri tutabilir ve referans şey olamaz bir değer türüdür. int gibi

1

Değer türleri doğrudan değerleri yerine ReferenceType gibi referanslar içerebilir. Bir değer boş olamaz ancak bir referans boş olabilir, yani hiçbir şey göstermez. Bir değerin içinde hiçbir şey olamaz. Bir değeri her zaman

Null veya null tip değer türleri normal değerlere ilave olarak, aynı zamanda, sadece başvuru türleri

2

bir int bir değer türü gibi ek boş değer destek özel bir değer türleridir değer bir tür içerir. Gerçekten Int32 tipi. NULL olabilecek nesneler referans türleridir. Temel seviyedeki fark, bir değer tipinin, bir referans tipinin değere bir referansı saklayacağı bir değerle değeri depolayabilmesidir. Bir referans boş olabilir, bu bir değere işaret etmemesi anlamına gelir. Bir değer türünün her zaman bir değeri vardır.

Nullable, boş olma seçeneğine sahip olmanızı sağlamak için bir değer türü sarar. Int kullanarak? NULL bir tür bildirmek için sadece bir derleyici kısayoludur.

0

İlkel int türü, ikili gösteriminde boş ifade edemez, ama Nullable<int> bu değerin boş bilgiyi ifade etmek ekstra bir bit ekledi.

+0

Birisi aşağı oy vermenin sebebini göstermesi gerektiğini verir. Nullable , n'nin null olarak ifade edilmesi için CLR'nin bu özel yapıyla ilgilenmek için biraz revize edilmesi gerektiğinden, int'nin null değerini ifade eden yapı tanımına 'hasValue' eklenmiş özel bir özel bool ekler. İlkel int, tüm ikili permütasyonları, yığın içinde 4 bayta sahip olması koşuluyla int değerini temsil ettiğinden boş gösteremez. – Thomson

+0

Reddetmedim, ancak herhangi bir destekleyici belge olmadan bellek düzeniyle ilgili belirsiz bir gerçeği gerekçe göstermiş olabilir. Aksi halde emin değilim. – recursive

2

Sen int kullanarak bir null int sahip olabilir? veya Nullable<int> her ikisi de aynı şeydir.