Bu, C # 3.0'ın yeni bir özelliği olan uzantı yöntemlerini bildirmek için kullanılan sözdizimidir.
Bir uzantı yöntemi, Visual Studio'daki intellisense yardımıyla derleyicinin, uzantı yönteminizin aslında söz konusu nesnede bir örnek yöntemi olarak mevcut olduğunu gösterdiği bölüm kod, parça derleyici "sihirli" dir.
Bir örnek vereyim.
String sınıfında GobbleGobble adlı bir yöntem yoktur, bu yüzden bir uzantı yöntemi oluşturalım:
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
Sınıf adı sadece benim adlandırma kuralımdır, onu böyle adlandırmak gerekli değildir, ancak yöntem gibi statik olması gerekir.
Yukarıdaki yöntemi bildirdikten sonra, Visual Studio'da şunu yazabilirsiniz:
String s = "Turkey Baster!";
s.
noktadan sonra, intellisense bekleyin ve orada bir GobbleGobble yöntemi olduğunu fark edin, kodu şu şekilde tamamlayın:
String s = "Turkey Baster!";
s.GobbleGobble();
Önemli : Genişletme yönteminin bildirildiği sınıf, intellisense'in yöntemi göstermesi için derleyici ve intellisense işlemcisi tarafından kullanılabilir olmalıdır. GobbleGobble'ı manuel olarak yazarsanız ve Ctrl+ .kısayolunu kullanırsanız, dosyaya direktifleri kullanarak doğru şekilde girmenize yardımcı olmaz.
Yöntemin parametresinin kaybolduğuna dikkat edin. Derleyici, aşağıdaki önemli bitlerin etrafında sessizce hareket edecektir:
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
Böylece, yukarıdaki kod derleyici tarafından şuna dönüştürülecektir:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Yani görüşme zamanında, bunun sihirli bir yanı yok, sadece statik bir yönteme çağrı.
Uzantı yönteminiz birden fazla parametre bildirirse, yalnızca ilkinin this
değiştiriciyi desteklediğini ve geri kalanının yöntem çağrısının bir parçası olarak normal şekilde belirtilmesi gerektiğini unutmayın:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Uzantı yöntemleri kısmen Linq nedeniyle eklenmiştir; burada C # 'ın Linq sözdizimi, oyundaki nesneler için uygun şekilde adlandırılmış uzantı yöntemlerini arayacaktır, bu da Linq desteğini herhangi bir sınıf türüne yalnızca doğru uzantıyı bildirerek "tanıtabileceğiniz" anlamına gelir. yöntemler. Elbette, tam Linq desteği çok fazla iş gerektirir, ancak bu mümkündür.
Ayrıca, uzantı yöntemleri kendi başlarına gerçekten kullanışlıdır, bu yüzden okuyun.
İşte birkaç bağlantı: