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
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.

Neden Java statik olarak bir sınıf bil...
Liste<Köpek> Listenin alt<Hay...
Neden değil't Veritabanı-Öneki.bö...
Neden kısa, ama int değişken değil ben...
Neden't iç içe geçmiş işlev kapan...