Bagaimana bekerja dengan delegasi di C #

Delegasi adalah penunjuk fungsi tipe-aman yang bisa mereferensikan metode yang memiliki tanda tangan yang sama seperti delegasi. Anda dapat memanfaatkan delegasi di C # untuk mengimplementasikan acara dan metode panggilan kembali. Delegasi multicast adalah salah satu yang dapat menunjuk ke satu atau lebih metode yang memiliki tanda tangan identik.

Memahami delegasi di C #

Intinya, seorang delegasi memegang referensi ke sebuah metode dan juga ke objek target tempat metode tersebut harus dipanggil. Delegasi di C # mirip dengan fungsi pointer di C ++, tapi C # tipe aman. Anda dapat meneruskan metode sebagai parameter ke delegasi untuk memungkinkan delegasi menunjuk ke metode. Delegasi digunakan untuk mendefinisikan metode callback dan mengimplementasikan penanganan event, dan mereka dideklarasikan menggunakan kata kunci "delegate". Anda bisa mendeklarasikan delegasi yang bisa muncul sendiri atau bahkan bersarang di dalam kelas.

Ada tiga langkah dalam menggunakan delegasi. Ini termasuk deklarasi, instansiasi, dan pemanggilan. 

Tanda tangan seorang delegasi terlihat seperti ini:

delegate result-type identifier ([parameter])

Pernyataan berikut menunjukkan bagaimana Anda dapat mendeklarasikan delegasi.

delegasi publik void MyDelegate (teks string);

Seperti yang Anda lihat pada pernyataan di atas, nama delegasi adalah "MyDelegate", ia memiliki jenis kembalian "void", dan menerima objek string sebagai argumen. Ini menyiratkan bahwa delegasi MyDelegate dapat menunjuk ke metode yang memiliki tanda tangan identik. Ini hanyalah sebuah deklarasi - Anda harus membuat instance delegasi sebelum Anda dapat menggunakannya. Pernyataan yang diberikan selanjutnya menunjukkan bagaimana Anda dapat membuat instance delegasi yang dideklarasikan di atas.

MyDelegate d = new MyDelegate (ShowText);

Setelah Anda mendeklarasikan dan membuat instance delegasi, Anda dapat menjalankan metode yang ditunjuk oleh delegasi dengan mudah.

d ("Halo Dunia ...");

Di sini, d adalah instance delegasi

Anda juga bisa menjalankan metode yang ditunjuk instance delegasi untuk menggunakan metode Invoke () pada instance delegasi seperti yang ditunjukkan di bawah ini.

d.Invoke ("Halo Dunia ...");

Jika Anda memiliki metode yang menerima dua angka dan Anda ingin menambahkannya dan mengembalikan jumlah kedua angka tersebut, Anda dapat menggunakan delegasi untuk menyimpan nilai kembalian metode seperti yang ditunjukkan dalam cuplikan kode yang diberikan di bawah ini.

hasil int = d (12, 15);

Berikut adalah daftar kode lengkap untuk referensi Anda.

menggunakan Sistem;

Delegasi namespace

{

    delegasi publik int MyDelegate (int x, int y);

    Program kelas

    {

      statis int Sum (int x, int y)

        {

            kembali x + y;

        }

        kekosongan statis Utama ()

        {

            MyDelegate d = new MyDelegate (Jumlah);           

            hasil int = d.Invoke (12, 15);

            Console.WriteLine (hasil);

            Console.ReadLine ();

        }

    }

Para delegasi beraksi di C #

Berikut adalah daftar kode lengkapnya.

menggunakan Sistem;

Delegasi namespace

{

    delegasi publik void MyDelegate (teks string);

    Program kelas

    {

        public static void ShowText (teks string)

        {

            Console.WriteLine (teks);

        }

        kekosongan statis Utama ()

        {

            MyDelegate d = new MyDelegate (ShowText);

            d ("Halo Dunia ...");

            Console.ReadLine ();

        }

    }

}

Perhatikan bahwa Anda dapat menetapkan beberapa objek ke instance delegasi menggunakan operator +, yang menjadikan delegasi tersebut sebagai delegasi multicasting. Anda juga dapat menggabungkan instance delegasi menggunakan metode statis Combine.

Runtime menyimpan daftar (juga disebut daftar pemanggilan) secara internal untuk menjalankan beberapa metode. Daftar kode berikut menunjukkan bagaimana Anda dapat menggunakan metode Combine () untuk menggabungkan beberapa contoh delegasi.

myDelegate d1 = new myDelegate (Metode1);

myDelegate d2 = new myDelegate (Metode2);

myDelegate multicastDelegate = (myDelegate) Delegate.Combine (d1, d2);

multicastDelegate.Invoke ();

Delegasi yang dapat menunjuk ke beberapa metode dikenal sebagai delegasi multicast. Perhatikan bahwa instance delegasi tidak dapat diubah. Jadi, saat Anda menggabungkan delegasi atau mengurangi satu instance delegasi dari daftar, instance delegasi baru dibuat untuk mewakili daftar target atau metode yang diperbarui atau baru yang akan dipanggil.

Delegasi multicast beraksi di C #

Daftar kode berikut menggambarkan delegasi multicast. Perhatikan penggunaan contoh delegasi: Di ​​sini kita telah menggunakan operator + = untuk menetapkan delegasi ke beberapa metode yang memiliki tanda tangan identik.

menggunakan Sistem;

Delegasi namespace

{

    delegasi publik void MyDelegate ();

    Program kelas

    {

        public static void Method1 ()

        {

            Console.WriteLine ("Di Dalam Metode1 ...");

        }

        public static void Method2 ()

        {

            Console.WriteLine ("Di Dalam Metode2 ...");

        }

        kekosongan statis Utama ()

        {

            MyDelegate d = null;

            d + = Metode1;

            d + = Metode2;

            d.Invoke ();

            Console.ReadLine ();

        }

    }

}

Para delegasi sangat cocok untuk mengimplementasikan pemrograman berbasis peristiwa. Seorang delegasi tidak perlu mengetahui kelas dari objek yang dirujuknya. Yang perlu diketahui hanyalah tanda tangan dari metode yang akan ditunjukkannya. Penggunaan delegasi yang tepat dapat mendorong penggunaan kembali kode Anda dan fleksibilitas dalam desain Anda. Anda dapat merujuk ke dokumentasi online Microsoft untuk informasi lebih lanjut tentang delegasi.