Ini adalah sintaks untuk mendeklarasikan metode ekstensi, fitur baru C # 3.0.
Metode penyuluhan adalah kode bagian, bagian penyusun "ajaib", di mana penyusun dengan bantuan Intellisense di Visual Studio membuatnya tampak bahwa metode penyuluhan Anda sebenarnya tersedia sebagai metode contoh pada objek yang dimaksud.
Izinkan saya memberi contoh.
Tidak ada metode pada kelas String yang bernama GobbleGobble, jadi mari buat metode ekstensi:
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
Nama kelas hanyalah konvensi penamaan saya, tidak perlu menamainya seperti itu, tetapi harus statis, seperti halnya metode.
Setelah mendeklarasikan metode di atas, Anda dapat, di Visual Studio, ketik ini:
String s = "Turkey Baster!";
s.
setelah titik tunggu intellisense, dan perhatikan ada metode GobbleGobble disana, lengkapi kodenya seperti ini:
String s = "Turkey Baster!";
s.GobbleGobble();
Penting : Kelas di mana metode ekstensi dideklarasikan harus tersedia untuk compiler dan prosesor intellisense agar intellisense dapat menampilkan metode tersebut. Jika Anda mengetik di GobbleGobble secara manual, dan menggunakan pintasan Ctrl+ ., itu tidak akan membantu Anda mendapatkan hak menggunakan arahan ke dalam file.
Perhatikan bahwa parameter metode telah menghilang. Kompiler diam-diam akan memindahkan bit-bit penting, yaitu:
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
Jadi, kode di atas akan diubah oleh compiler menjadi seperti ini:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Jadi pada waktu panggilan, tidak ada yang ajaib tentang itu, itu hanya panggilan ke metode statis.
Perhatikan bahwa jika metode ekstensi Anda mendeklarasikan lebih dari satu parameter, hanya parameter pertama yang mendukung this
pengubah, dan sisanya harus ditetapkan sebagai bagian dari panggilan metode seperti biasa:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Metode ekstensi ditambahkan sebagian karena Linq, di mana sintaks Linq dari C # akan mencari metode ekstensi yang diberi nama dengan tepat untuk objek yang sedang dimainkan, yang berarti Anda dapat "memperkenalkan" dukungan Linq ke dalam semua jenis kelas hanya dengan mendeklarasikan ekstensi yang tepat metode. Tentu saja, dukungan penuh Linq adalah pekerjaan yang berat, tetapi mungkin saja.
Selain itu, metode penyuluhan sendiri sangat berguna, jadi bacalah tentang itu.
Berikut beberapa tautan: