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

  • manadude21

    manadude21

    11 Mart 2008
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011