SORU
3 EKİM 2011, PAZARTESİ


Neden operatör null verildiğinde yanlış döndürür?

is operatör biraz tutarsız gibi geliyor bana.

bool Test()
{
    // Returns false, but should return true.
    return null is string;
}

null değeri (veya null) herhangi bir başvuru türüne ait bir bekliyor. Ve gerçekten de, C# dili belirtimi, bu hipotezi destekleyen bir şey, örneğin (Örtülü başvuru dönüşüm 6.1.6) diyor ki:

Örtülü referans dönüşümler vardır:
...
Başvuru-herhangi bir türü için null değişmez. • *

Açıklaması (7.10.10 is operatörü) is operatör başlar diyerek ifade (E is T) içinde sonuçlanacak gerçek bir başvuru dönüşüm E T var, ama daha sonra yazarlar, hadi tarafından açıkça hariç davası E null hazır bilgi ya da bir null değer.

Neden yapıyorlar bunu? Bana biraz çelişkili gibi görünüyor.

CEVAP
3 EKİM 2011, PAZARTESİ


Bu soru subject of my blog on May 30th 2013. Harika soru için teşekkür ederiz!


Boş bir yolda bakıyorsunuz.

Birisi size "yolda bir Honda Civic tutun?" diye sorar

Evet. Evet olabilir.

Birisi ikinci bir yolda size puan. Ayrıca boş. "Evimin geçerli içeriğini yolda sığabilir?" diye sorarlar

Evet, belli ki. İki bahçeyi de boş! Bu kadar net bir içeriğini en başta da içeriği yok çünkü diğer uygun olabilir.

Birisi "yolda bir Honda Civic içeriyor Mu?" diye soruyor sana

Hayır, öyle değil.

is operatör ikinci soru cevapları düşünüyorsun:bu değer dikkate alındığında, bu türde bir değişken sığar mı?Boş bir başvuru, bu tür bir değişken içine sığar mı? Evet öyle.

is operatör cevaplar soru bu değil. is operatör cevaplar üçüncü soru bu soru. y is X istememektedir "y türünde bir değişken X hukuki bir değer mi?"İster"y türünde bir nesne X için geçerli bir referans mı?"Bir null beri başvuru için geçerli bir referans değilherhangi birnesneherhangi biryazın cevabı "" hayır. Kapının önünde boş; bir Honda Civic içermez.

Ona bakmak için başka bir yolu y is X soru Eğer söylersem "y as X, boş olmayan bir sonuç elde eder miyim? cevap bu mu Eğer y null, cevap açıkça hayır!


Sorunuzu biraz daha derin bakmak için:

Boş değer (veya null) herhangi bir başvuru türüne ait bir bekliyor

Bir örtülü bir farz olurduyazınbirdeğerleri ayarlayınve buatama uyumlulukbir değer türü değişkeni ile X, y daha fazla ne daha az bir şey değildiry olup olmadığını kontrol set x üyesidir.

Bu tip bakmaktan son derece yaygın bir şekilde olsa da, o değilsadecetip bakarak yol, yol değil C# tip bakıyor. Null başvurular C tip üyesi#;atama uyumlulukdeğilsadece eğer bir değeri varsa görmek için bir dizi kontrol. Boş bir başvuru diyeatama uyumludurbir değişken referans tip X gelmez boş bir üye fonksiyon X "atama ile uyumlu" ilişkisi ve "üye tipi" ilgili ortada bir sürü üst üste, ama onlar aynı CLR.

Yazın kuramı ile ilgili düşünceleri sizi ilgilendirmiyor ise, bu konu benim son makaleler göz atın:

What is this thing you call a "type"? Part one

What is this thing you call a "type"? Part Two

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C#

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • RyanXLT

    RyanXLT

    22 Ocak 2011