Bagaimana bekerja dengan metode ekstensi di C #

Bahasa pemrograman C # menyediakan dukungan untuk metode ekstensi dari C # 3.0. Metode ekstensi adalah salah satu yang digunakan untuk memperluas fungsionalitas tipe yang ada dengan menambahkan metode tanpa perlu membuat tipe turunan baru. Anda tidak perlu membuat subclass dari kelas yang ada atau mengkompilasi ulang atau mengubah kelas yang ada untuk bekerja dengan metode ekstensi. Metode ekstensi meningkatkan keterbacaan kode Anda sementara pada saat yang sama memungkinkan Anda memperluas fungsionalitas jenis yang ada.

Metode ekstensi umum di .Net menyertakan operator kueri standar LINQ yang menambahkan kemampuan kueri tambahan ke System.Collections.IEnumerable and System.Collections.Generic.IEnumerablejenis. Perhatikan bahwa Anda dapat memanfaatkan metode ekstensi untuk memperluas kelas atau antarmuka tetapi Anda tidak dapat mengganti metode mereka. MSDN menyatakan: "Metode ekstensi memungkinkan Anda untuk" menambahkan "metode ke tipe yang ada tanpa membuat tipe turunan baru, mengkompilasi ulang, atau mengubah tipe aslinya. Metode ekstensi adalah jenis metode statis khusus, tetapi mereka dipanggil seolah-olah metode tersebut adalah metode contoh pada tipe yang diperluas. "

Pada dasarnya, metode ekstensi adalah tipe khusus dari metode statis dan memungkinkan Anda menambahkan fungsionalitas ke tipe yang sudah ada bahkan jika Anda tidak memiliki akses ke kode sumber tipe tersebut. Metode ekstensi sama seperti metode statis lainnya tetapi memiliki referensi "ini" sebagai parameter pertamanya. Anda dapat menambahkan metode ekstensi sebanyak yang Anda inginkan ke jenis apa pun. Yang terpenting, Anda juga dapat menambahkan metode ekstensi bahkan ke tipe nilai.

Saat bekerja dengan metode ekstensi, ingatlah poin-poin ini:

  • Metode ekstensi harus menjadi metode statis
  • Metode ekstensi harus berada di dalam kelas statis - kelas tersebut dapat memiliki nama apa pun
  • Parameter dalam metode ekstensi harus selalu memiliki kata kunci "ini" sebelum jenis pemanggilan metode tersebut

Perhatikan bahwa jika Anda mendefinisikan metode ekstensi pada tipe yang memiliki tanda tangan yang sama seperti metode lain dari tipe yang Anda perluas, metode ekstensi tidak akan pernah dipanggil.

Metode ekstensi pemrograman di C #

Pada bagian ini kita akan mempelajari bagaimana memprogram metode ekstensi menggunakan C #. Daftar kode berikut menggambarkan bagaimana metode ekstensi terlihat.

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

Perhatikan parameter pertama untuk metode ekstensi. Seperti yang telah dibahas, metode ekstensi apa pun harus statis dan harus memiliki kata kunci "ini" sebelum parameter tempat Anda ingin metode dipanggil. Ketika Anda menetapkan kata kunci "ini" dalam daftar parameter seperti yang ditunjukkan pada contoh di atas, Anda memberi tahu kompiler bahwa metode ekstensi telah ditentukan untuk kelas string.

Inilah cara Anda dapat menggunakan metode ekstensi IsNumeric pada instance string.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

Ketika Anda menjalankan program di atas, pesan ("Objek string bernama str berisi nilai numerik." Ditampilkan di jendela konsol.

Anda dapat menggunakan metode ekstensi untuk memasukkan fungsionalitas baru melalui metode ke suatu tipe tanpa perlu memodifikasi, menurunkan, atau mengkompilasi ulang tipe aslinya. Seperti yang saya sebutkan sebelumnya, metode ekstensi juga dapat diterapkan ke tipe nilai. Mari kita lihat bagaimana ini bisa dicapai dengan sebuah contoh.

Kelas berikut bernama IntegerExtensions berisi metode ekstensi bernama IsEven yang mengembalikan nilai true jika integer yang dipanggil adalah genap, salah jika sebaliknya.

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

Dan, inilah cara Anda dapat menggunakan metode ekstensi IsEven pada integer.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");