C# derleyici uzantı yöntemlerini nasıl uygular?Uzantı yöntemleri nasıl derlenir?
cevap
süreç aynen aşırı yük çözünürlüğü aynıdır: tüm fonksiyonlar "Func" adlı
Func(myObject);
derleyici kontrolleri ve tabana upcasting, Parametrelere (muhtemelen dönüşümleri kullanarak myObject statik tip eşleştirmeye çalışır sınıf). Başarılı olursa, uygun işlevi çağırır. Eğer "normal bir şekilde" uzantıları yöntemlerini çağırabilir fark ederse
, o zaman temizler:
(burada string) Verilen türü içinstatic class MyExtensions
{
public static void MyFunc(this string arg)
{
// ...
}
}
string a = "aa";
MyExtensions.MyFunc(a); // OK
a.MyFunc(); // same as above, but nicer
, derleyici sadece tüm statik fonksiyonlar arar "Bu" değiştirici ilk argüman üzerinde ve soldaki statik tipini eşleştirmeye çalışır. işlev parametresi türü ile (bu örnekte "a"). Bir sınıfın
Örnek yöntemleri gizli bir argüman var. Bir örnek: gizli argüman sen bu kullanabilirsiniz nedenidir
static void Foo(Example this, int arg) {}
O: JIT derleyicisi onunla bitince
class Example {
public void Foo(int arg) {}
}
aslında şöyle
, C# sözdizimi geri dönüştürülür bir örnek yöntem. JIT derleyicisi Foo yöntemini çağırmak sağlayan nesne başvurusu geçmesine argüman çözmek için kullanılır.Anlayacağınız gibi, şimdi bir uzantısı yöntemine bir çok kısa hop.
derleyici ilk fonksiyonunun imza uyan bir işlev için temel sınıf bakar. Eğer onu bulamazsa bir uzantı arar. Uzatma temel sınıf yöntemine göre bir temel sınıf yöntemiyle aynı imza sahipse yerine adlandırılır. Bu yardımcı olabilir: Extension Methods