Metode Ekstensi

Nota

Konten ini dicetak ulang oleh izin Pearson Education, Inc. dari Panduan Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Pustaka .NET yang Dapat Digunakan Kembali, Edisi ke-2. Edisi itu diterbitkan pada tahun 2008, dan buku tersebut telah sepenuhnya direvisi pada edisi ketiga. Beberapa informasi di halaman ini mungkin sudah kedaluarsa.

Metode ekstensi adalah fitur bahasa yang memungkinkan metode statis dipanggil menggunakan sintaks panggilan metode instans. Metode ini harus mengambil setidaknya satu parameter, yang mewakili instans yang akan dioperasikan oleh metode.

Kelas yang mendefinisikan metode ekstensi tersebut disebut sebagai kelas "sponsor", dan harus dinyatakan sebagai statis. Untuk menggunakan metode ekstensi, seseorang harus mengimpor namespace yang menentukan kelas sponsor.

❌ HINDARI mendefinisikan metode ekstensi secara sembarangan, terutama pada jenis yang tidak Anda miliki.

Jika Anda memiliki kode sumber dari jenis tertentu, pertimbangkan untuk menggunakan metode instance secara teratur sebagai pilihan yang lebih baik. Jika Anda tidak memiliki metode, dan Anda ingin menambahkannya, berhati-hatilah. Penggunaan yang berlebihan dari metode ekstensi berpotensi menyebabkan API jenis yang tidak dirancang untuk memiliki metode-metode ini menjadi berantakan.

✔️ PERTIMBANGKAN untuk menggunakan metode ekstensi dalam salah satu skenario berikut:

  • Untuk menyediakan fungsionalitas pembantu yang relevan dengan setiap implementasi antarmuka, jika fungsionalitas tersebut dapat ditulis dalam hal antarmuka inti. Ini karena implementasi konkret tidak dapat dihubungkan ke antarmuka. Misalnya, operator LINQ to Objects diimplementasikan sebagai metode ekstensi untuk semua jenis IEnumerable<T>. Dengan demikian, implementasi apa pun IEnumerable<> secara otomatis mendukung LINQ.

  • Ketika metode instans akan memperkenalkan dependensi terhadap tipe tertentu, tetapi dependensi seperti itu akan melanggar aturan manajemen dependensi. Misalnya, dependensi dari String ke System.Uri mungkin tidak diinginkan, sehingga String.ToUri() metode instans yang kembali System.Uri akan menjadi desain yang salah dari perspektif manajemen dependensi. Metode ekstensi statis Uri.ToUri(this string str) yang mengembalikan System.Uri akan menjadi desain yang jauh lebih baik.

❌ HINDARI mendefinisikan metode ekstensi pada System.Object.

Pengguna VB tidak akan dapat memanggil metode tersebut pada referensi objek menggunakan sintaks metode ekstensi. VB tidak mendukung pemanggilan metode tersebut karena, di VB, mendeklarasikan referensi sebagai Objek memaksa semua pemanggilan metode di atasnya agar terlambat terikat (anggota aktual yang dipanggil ditentukan pada waktu proses), sementara pengikatan ke metode ekstensi ditentukan pada waktu kompilasi (terikat awal).

Perhatikan bahwa pedoman berlaku untuk bahasa lain di mana perilaku pengikatan yang sama ada, atau di mana metode ekstensi tidak didukung.

❌ JANGAN menempatkan metode ekstensi di namespace yang sama dengan jenis yang diperluas kecuali untuk menambahkan metode ke antarmuka atau untuk manajemen dependensi.

❌ HINDARI mendefinisikan dua metode ekstensi atau lebih dengan tanda tangan yang sama, bahkan jika mereka berada di namespace yang berbeda.

✔️ PERTIMBANGKAN untuk menentukan metode ekstensi di namespace yang sama dengan jenis yang diperluas jika jenisnya adalah antarmuka dan jika metode ekstensi dimaksudkan untuk digunakan dalam sebagian besar atau semua kasus.

❌ JANGAN tentukan metode ekstensi yang mengimplementasikan fitur di namespace yang biasanya terkait dengan fitur lain. Sebagai gantinya, tentukan di namespace yang terkait dengan fitur miliknya.

❌ HINDARI penamaan generik namespace yang didedikasikan untuk metode ekstensi (misalnya, "Ekstensi"). Gunakan nama deskriptif (misalnya, "Perutean") sebagai gantinya.

© Porsi 2005, 2009 Microsoft Corporation. Hak cipta dilindungi oleh undang-undang

Dicetak ulang oleh izin Pearson Education, Inc. dari Panduan Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Pustaka .NET yang Dapat Digunakan Kembali, Edisi ke-2 oleh Krzysztof Cwalina dan Brad Abrams, diterbitkan 22 Okt 2008 oleh Addison-Wesley Professional sebagai bagian dari Seri Pengembangan Microsoft Windows.

Lihat juga