C # spesifikasyonunda bölümün yorumlanması gerekiyor


11

C # belirtimini okuyorum . Bir segmentte açıklama kullanabilirsiniz:

C # birleşik bir tip sistemine sahiptir. İnt ve double gibi ilkel türler dahil tüm C # türleri tek bir kök nesne türünden miras alır. Bu nedenle, tüm türler bir dizi ortak işlemi paylaşır ve herhangi bir türdeki değerler tutarlı bir şekilde saklanabilir, taşınabilir ve çalıştırılabilir. Dahası, C #, hem kullanıcı tanımlı referans tiplerini hem de değer tiplerini destekler, nesnelerin dinamik olarak tahsis edilmesine ve hafif yapıların hat içi depolanmasına izin verir.

Bu bağlamda “hafif yapıların hat içi depolanması” ne anlama geliyor?

Yanıtlar:


11

Svick'in cevabı iyi ama birkaç ekstra puan daha ekleyeceğimi düşündüm.

İlk olarak, paragraf kusurlu. İşaretçi türleri nesneden miras almaz. Derleme zamanında arabirim türleri veya tür parametre türleri olarak bilinen değerler, çalışma zamanında geçersiz başvurular veya nesneden devralınan bir şeyin iyi niyetli örnekleri olacaktır, ancak beni her zaman bu türlerin " nesneden devralma "; miras, ata üyelerinin üyelerinin soydan gelen üyeleridir, ancak normalde "ToString" i IEnumerable üyesi olarak düşünmezsiniz. Bunu IEnumerable uygulayan şeyin bir üyesi olarak düşünüyorsunuz .

Paragraf da kusurludur, çünkü bu özellikte "ilkel tip" görünen ve tanımsız görünen tek yerdir. Bu nedenle hem gereksiz hem de kafa karıştırıcıdır ve kaldırılmalıdır.

Bu paragrafın bir süre düzeltilmesini istedim. Bir dahaki sefere Mads'i gördüğümde ona hatırlatacağım.

Özel sorunuza cevap vermek için: svick elbette doğrudur, ancak belirli bir örneği görmek faydalıdır. Dediğinde:

struct ColorfulInt
{
    int value;
    Color color;
    ...
}

ve diyelim ki bir dizi oluşturursunuz:

ColorfulInt[] x = new ColorFulInt[100];

Sonra bu 100 inç ve 100 Renk için depolama dizinin kendisine gider . Bunun yerine ColorfulInt bir sınıf olsaydı, dizi ColorfulInt için 100 referans içerirdi, her birinin ayrı ayrı tahsis edilmesi gerekirdi. Bu yüz öğeyi ayrı ayrı ayırmak, hem zaman hem de alan içinde depolamayı dizinin kendisine ayırmaktan çok daha az verimlidir.


Peki, bu nesnelerin hafıza soyutlamasının önemi, onları manipüle etmeye hazır olduğunuzda, adreslenebilir alanın bitişik bir bloğunda yer alıyorlarsa, kimin nerede olduğunu bilen işaretçilerle erişmeleri daha kolay mıdır? Bu doğru mu, yoksa hala bir şey mi kaçırıyorum?
ChuckT

@ChuckT: Doğru. Dolaylı yükü ödemezsiniz ve ayrıca güzel bir önbellek konumu elde edersiniz.
Eric Lippert

12

Bu, değer türlerinin doğrudan tanımladığınız yerde saklandığı anlamına gelir; bu da referans türleriyle karşılaştırıldığında daha verimli olmasını sağlar.

Bu tam olarak ne anlama geliyor? Değer türünde yerel bir değişkeniniz varsa, genellikle doğrudan yığın üzerinde depolanır (ancak birçok istisna vardır). Değer türünde bir alanınız varsa, doğrudan çevreleme sınıfında veya yapısında depolanır.


1
Mantıklı. Bunu benim için temizlediğin için teşekkürler, svick!
ChuckT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.