SORU
15 AĞUSTOS 2012, ÇARŞAMBA


C#/.NET neden sbyte[] bayt olarak aynı onun dışında'In değil mi?

Ben sadece C garip bir fenomen#/gözlemledi.NET.

Bu minimal örnek göstermek için hazırladım:

if (new sbyte[5] is byte[])
{
 throw new ApplicationException("Impossible!");
}

object o = new sbyte[5];

if (o is byte[])
{
 throw new ApplicationException("Why???");
}

Bu atar "Neden???", ama "İmkansız!". Aynı boyutta ayrılmaz tür tüm diziler için çalışıyor. Birisi bana bunu açıklayabilir mi? Kafam karıştı. Kullanıyorum .NET bu arada 4.

P. S.: o.GetType() == typeof(byte[]) kullanarak beklenen sonuç elde edebileceğimi biliyorum.

CEVAP
15 AĞUSTOS 2012, ÇARŞAMBA


Döküm CLR kuralları bu mümkün olduğunu belirtin. C# kuralları mümkün olduğunu söylüyorlar. Çeşitli nedenlerle spec bu sapmayı tolere edeceklerini The C# team consciously decided.

Neden CLR buna izin veriyor mu? Rahatlıkla uygulamak çünkü muhtemelen. byte sbyte "sbyte[]." byte[] tedavi böylece aynı ikili gösterimi ^strong>bellek güvenliği ihlal etmeden.

Aynı numarayı aynı bellek düzeni ile diğer basit türler için çalışır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • J Medema

    J Medema

    11 EKİM 2006
  • Kiddyzuzaa

    Kiddyzuzaa

    25 ŞUBAT 2014
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010