SORU
16 EKİM 2013, ÇARŞAMBA


Nasıl, nerede ve ne zaman genel yöntemler beton yapılır?

This question genel bir yöntem somut implementaiton aslında meydana geldiği ile ilgili merak ediyorum. Google denedim ama yukarı doğru arama ile geliyor değilim.

Eğer bu basit bir örnek alırsak:

class Program
{
    public static T GetDefault<T>()
    {
        return default(T);
    }

    static void Main(string[] args)
    {
        int i = GetDefault<int>();
        double d = GetDefault<double>();
        string s = GetDefault<string>();
    }
}

benim kafam basmıyor. bodrumda bir noktada bu sonuçları bir uygulama ile 3 gerekli beton uygulamaları gibi, saf sözde bozma, hiç bu mantıksal beton implementaiton nerede belirli türde kullanılan sonuç doğru yığın ayırma vb.

class Program
{
    static void Main(string[] args)
    {
        int i = GetDefaultSystemInt32();
        double d = GetDefaultSystemFloat64();
        string s = GetDefaultSystemString();
    }

    static int GetDefaultSystemInt32()
    {
        int i = 0;
        return i;
    }
    static double GetDefaultSystemFloat64()
    {
        double d = 0.0;
        return d;
    }
    static string GetDefaultSystemString()
    {
        string s = null;
        return s;
    }
}

Hala genel türler açısından ifade edilir genel program IL bakarak:

.method public hidebysig static !!T  GetDefault<T>() cil managed
{
  // Code size       15 (0xf)
  .maxstack  1
  .locals init ([0] !!T CS$1$0000,
           [1] !!T CS$0$0001)
  IL_0000:  nop
  IL_0001:  ldloca.s   CS$0$0001
  IL_0003:  initobj    !!T
  IL_0009:  ldloc.1
  IL_000a:  stloc.0
  IL_000b:  br.s       IL_000d
  IL_000d:  ldloc.0
  IL_000e:  ret
} // end of method Program::GetDefault

Ve ne kadar ne kadar bir int ve bir double ve sonra bir dize arayan yığını ve iade ayrılması için karar verdi mi? Bu JİT sürecinin bir operasyon mu? Bu tamamen yanlış bir açıdan mı bakıyorum?

CEVAP
16 EKİM 2013, ÇARŞAMBA


C#, genel türleri ve yöntemleri kavramlarını, çalýþma tarafından desteklenir. C# derleyicisi aslında genel bir yöntemi somut bir sürümünü oluşturmak için gerekli değildir.

Gerçek" genel yöntem JİT tarafından çalışma zamanında oluşturulur ve IL yok. "beton Bir generic yöntem türü ile kullanılan ilk kez, TAM zamanında, eğer oluşturulmuş olup olmadığını görmek, ve eğer değilse, bu genel tür için uygun yöntemi inşa edecek.

Bu C şablonlar gibi jenerik ve şeyler arasındaki temel farklar biridir . Bunun da temel nedeni, birçok sınırlamaları ile jenerik - derleyici değil aslında oluşturma çalışma zamanı uygulaması için türleri, arabirim kısıtlamaları tarafından gerçekleştirilir derleme zaman kısıtlamaları, hangi yapmak jenerik biraz daha sınırlayıcı daha şablonları C açısından potansiyel kullanım durumları. Ancak, olası C desteklenmeyen şekilde genel türler ve kütüphanelerden kullanım yaradılışın sağlar çalışma zamanında desteklenir ve diğer derleme aslında şablon uygulamaları yarattı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006