2010-10-14 23 views

cevap

6

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çin
static 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

3

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

0

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