Cara menerapkan dan memanggil metode ekstensi kustom (Panduan Pemrograman C#)
Artikel ini menunjukkan cara menerapkan metode ekstensi Anda sendiri untuk jenis .NET apa pun. Kode klien dapat menggunakan metode ekstensi Anda. Proyek klien harus mereferensikan rakitan yang berisinya. Proyek klien harus menambahkan direktif menggunakan yang menentukan namespace tempat metode ekstensi ditentukan.
Untuk menentukan dan memanggil metode ekstensi:
- Tentukan kelas statis untuk memuat metode ekstensi. Kelas tidak dapat disarangkan di dalam jenis lain dan harus terlihat oleh kode klien. Untuk informasi selengkapnya tentang tingkat aksesibilitas, lihat Pengubah Akses.
- Terapkan metode ekstensi sebagai metode statis dengan setidaknya visibilitas yang sama dengan kelas yang memuat.
- Parameter pertama metode menentukan jenis yang dioperasikan metode; harus didahului dengan pengubah ini.
- Dalam kode panggilan, tambahkan
using
direktif untuk menentukan namespace layanan yang berisi kelas metode ekstensi. - Panggil metode sebagai metode instans pada jenis .
Catatan
Parameter pertama tidak ditentukan dengan memanggil kode karena mewakili jenis di mana operator sedang diterapkan, dan pengkompilasi sudah mengetahui jenis objek Anda. Anda hanya perlu memberikan argumen untuk parameter 2 melalui n
.
Contoh berikut mengimplementasikan metode ekstensi bernama WordCount
di kelas CustomExtensions.StringExtension
. Metode ini beroperasi pada kelas String, yang ditentukan sebagai parameter metode pertama. Namespace CustomExtensions
diimpor ke namespace layanan aplikasi, dan metode dipanggil di dalam metodeMain
.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type for which the method is defined.
public static int WordCount(this string str)
{
return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
Resolusi kelebihan beban lebih memilih instans atau metode statis yang ditentukan oleh jenis itu sendiri ke metode ekstensi. Metode ekstensi tidak dapat mengakses data privat apa pun di kelas yang diperluas.