SORU
7 AĞUSTOS 2015, Cuma


Maddeleştirme nedir?

Java parametrik polimorfizmi (Jenerik) silme ile uygular biliyorum. Silme ne demek olduğunu anladım.

Ben maddeleştirme ile parametrik polimorfizmi C# uygular. Bu yazdığınız yapabilirsiniz biliyorum

public void dosomething(List<String> input) {}
public void dosomething(List<Int> input) {}

ya da bazı parametrik türün tür parametresi ne zamanında biliyor, ama ne olduğunu bilmiyorum.

  • Şeyleşiyor türü nedir?
  • Şeyleşiyor değeri nedir?
  • Değer/tip şeyleşiyor olduğunda ne olur?

CEVAP
7 AĞUSTOS 2015, Cuma


Maddeleştirme soyut bir şey almak ve somut bir şey oluşturma sürecidir.

TerimmaddeleştirmeC# jenerik geçtiği için generic type definition ve bir veya daha fazla ifade edergenel tür bağımsız değişkenleri(soyut bir şeyi) yeni bir oluşturmak için birleştirilirgenel tür(somut şey).

Başka bir ifadeyle List<T> int tanımı alıp List<int> beton bir tür üretme işlemidir.

Daha fazla anlamak için aşağıdaki yaklaşımları karşılaştırmak:

  • Java jenerik, genel tür tanımında esas olarak somut bir genel tür her izin türü bağımsız değişken kombinasyonları arasında paylaşılan dönüşür. Bu nedenle, kaynak kodu seviye) çok tip (ikili düzeyde) eşleştirilir türü - ama sonuç olarak, information about the type arguments of an instance is discarded in that instance (type erasure).

    1. Bir yan etki olarak, bu uygulama tekniği, yalnızca genel tür bağımsız değişkenleri vardır doğal olarak izin verilen bu tür paylaşabilirsiniz ikili kod kendi beton türü; yani bu tür olan depolama yerleri var değiştirilebilir temsilleri, yani referans tipleri. 8* *(basit bir başvuru türü bir sarıcı yerleştirerek).
    2. Kod jenerik bu şekilde uygulamak için yineleniyor.
    3. Çalışma zamanı (yansıma kullanarak) boş olabilirdi bu tür bilgileri kaybolur. Bu da, genel bir tür (kullanma becerisi, uzman . bu uzmanlık anlamına gelir ^em>kaynak kodubelirli bir genel bağımsız değişken birleşimi için) çok kısıtlı.
    4. Bu mekanizma, çalışma ortamından destek gerektirmez.
    5. Java programı workarounds to retain type information bir kaç vardır ya da JVM tabanlı bir dil kullanabilir.
  • C# jenerik, jenerik tip tanım çalışma zamanında bellekte tutulur. Yeni bir beton türü gerekli olduğunda, çalışma zamanı Ortamı Genel tür tanımı ve tür bağımsız değişkenleri birleştirir ve yeni tip (maddeleştirme) oluşturur. Tür bağımsız değişkeni, her birleşimi için yeni bir türçalışma zamanında.

    1. Bu uygulama tekniği tipi değişken kombinasyonu herhangi bir örneği olmasını sağlar. Genel tür bağımsız değişkenleri olarak kullanarak değer türleri bu tür kendi fasulye beri boks, neden olmaz. (TabiiBoxing still exists in C#, - ama başka bir senaryo olur, bu değil.)
    2. Kod tekrarından bir sorun olabilir ama pratikte yeterince akıllı uygulamaları (this includes Microsoft .NET Mono) bazı örneklemesi için kod paylaşabilir yüzünden mi, değil.
    3. Tür bilgileri bir ölçüde uzmanlaşma sağlayan, tür bağımsız değişkenleri yansıtma kullanarak incelenerek korunur. Ancak, uzmanlık derecesi sınırlı, genel tür tanımında derlenmiş olduğu gerçeğinin bir sonucu olarakönceherhangi bir maddeleştirme (compiling the definition against the constraints on the type parameters - böylece, the compiler has to be able "understand" the definition even in the absence of specific type arguments) tarafından yapılır olur.
    4. Bu uygulama tekniği ağır çalışma zamanı desteği bağlıdır ve derleme JİT sık sık dinamik kod üretimi KISITLI OLDUĞU C# generics have some limitations on platforms like iOS, duymak neden olan).
    5. C kapsamında# jenerik, maddeleştirme çalışma zamanı ortamı tarafından sizin için yapılır. Ancak, eğer sen de istersen daha rahat anlamak arasındaki fark genel tür tanımı ve somut bir genel tür, you can always perform a reification on your own, using the System.Type class (bile, özellikle genel tür bağımsız değişken kombinasyonu sen başlatmasını yoktu görünür kaynak kodu doğrudan).
  • C şablonlar, şablon tanımı derleme zamanında bellekte tutulur. Ne zaman yeni bir örnekleme bir Şablon Türü gerekli kaynak kodu, derleyici birleştirir şablon tanımı ve şablon bağımsız değişkenleri ve yarattığı yeni tür bir süreç de uyuyor bizim ilk tanımı maddeleştirme). Şablon bağımsız değişken, her kombinasyon için yeni bir türderleme zamanında.

    1. Bu uygulama tekniği tipi değişken kombinasyonu herhangi bir örneği olmasını sağlar.
    2. Bu ikili kod çoğaltmak için bilinen ama yeterince akıllı araç zincirleme hala bu algılar ve kod paylaşım bazı örneklemesi için olabilir.
    3. Şablon tanımını kendisi "" - only its concrete instantiations are actually compiled. derlenmez Bu derleyici üzerinde daha az kısıtlama yerleştirir ve template specialization büyük ölçüde izin verir.
    4. Şablon örneklemesi derleme zamanında yapılır bu yana, çalışma zamanı desteği yok burada da gereklidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007