Saya bingung apa peran sebenarnya dari seorang delegasi?
Saya telah sering ditanya pertanyaan ini dalam wawancara saya, tetapi saya tidak berpikir bahwa pewawancara puas dengan jawaban saya.
Adakah yang bisa memberi tahu saya definisi terbaik, dalam satu kalimat, dengan contoh praktis?
Jawaban:
Saya suka menganggap delegasi sebagai "penunjuk ke fungsi". Ini kembali ke hari C, tetapi gagasan itu masih berlaku.
Idenya adalah Anda harus dapat memanggil sepotong kode, tetapi sepotong kode yang akan Anda panggil tidak dikenal sampai runtime. Jadi, Anda menggunakan "delegasi" untuk tujuan itu. Delegasi berguna untuk hal-hal seperti pengendali acara, dan semacamnya, di mana Anda melakukan hal-hal yang berbeda berdasarkan acara yang berbeda, misalnya.
Berikut referensi untuk C # yang dapat Anda lihat:
Dalam C #, misalnya, katakanlah kami memiliki perhitungan yang ingin kami lakukan dan kami ingin menggunakan metode perhitungan lain yang tidak kami ketahui sampai runtime. Jadi kita mungkin memiliki beberapa metode perhitungan seperti ini:
Kami dapat mendeklarasikan tanda tangan delegasi seperti ini:
Dan kemudian kita bisa mendeklarasikan metode yang mengambil delegasi sebagai parameter seperti ini:
Dan kita bisa memanggil
CalcMyTotal
metode yang lewat dalam metode delegasi yang ingin kita gunakan.sumber
Foo
ke delegasi akan memanggilthis.Foo()
daripada fungsi statis seperti fungsi pointer akan lakukan (dalam C, Anda sering memilikivoid*
parameter tambahan untuk lolosthis
ke penunjuk fungsi)sebuah delegasi hanyalah sebuah pointer fungsi.
sederhananya Anda menetapkan metode yang ingin Anda jalankan delegasi Anda. kemudian dalam kode Anda dapat memanggil metode itu melalui Invoke.
beberapa kode untuk diperagakan (tulis ini dari memori sehingga sintaks mungkin tidak aktif)
sumber
Diambil dari sini
Atau, sebagai contoh pseudo yang mudah: sesuatu mengirim permintaan ke objek1. object1 kemudian meneruskan permintaan dan dirinya sendiri ke object2 - delegate. object2 memproses permintaan dan melakukan beberapa pekerjaan. (catatan: tautan di atas memberikan contoh yang bagus)
sumber
Pikirkan tentang mendelegasikan sebagai implementasi sederhana dari pola Komando.
sumber
Delegasi adalah objek yang dapat merujuk ke suatu metode. Jadi, ketika kita membuat delegasi, kita membuat objek yang dapat menyimpan referensi ke suatu metode. Selanjutnya, metode ini dapat dipanggil melalui referensi ini. Dengan demikian, seorang delegasi dapat meminta metode yang dimaksud. Keuntungan utama dari delegasi adalah memungkinkan kita untuk menentukan panggilan ke suatu metode, tetapi metode yang benar-benar dipanggil ditentukan pada saat runtime, bukan pada waktu kompilasi.
Delegasi sederhana
http://knowpacific.wordpress.com/2012/01/26/delegate/
sumber
Di sini saya akan menjelaskan delegasi, delegasi multicast dan penggunaannya .. Delegasi adalah tipe yang menyimpan referensi metode dalam suatu objek. Ini juga disebut sebagai pointer fungsi tipe aman. Kita dapat mengatakan bahwa delegasi adalah tipe yang mendefinisikan metode tanda tangan.
Saat Anda membuat instance delegasi, Anda dapat mengaitkan instansinya dengan metode apa pun dengan tanda tangan yang kompatibel. Anda dapat meminta (atau memanggil) metode melalui instance delegate. Delegasi digunakan untuk meneruskan metode sebagai argumen ke metode lain. Penangan acara tidak lebih dari metode yang dipanggil melalui delegasi. Keuntungan menggunakan delegasi adalah, Meringkas panggilan metode dari pemanggil Penggunaan efektif delegasi meningkatkan kinerja aplikasi Digunakan untuk memanggil metode secara tidak sinkron. Ada beberapa properti delegasi tersebut
delegate public type_of_delegate delegate_name () // Deklarasi
Contoh berikut menunjukkan operasi delegasi:
Apa itu Delegasi Multicast?
Ini adalah delegasi yang memegang referensi lebih dari satu metode. Delegasi multicast hanya boleh berisi metode yang mengembalikan batal, kalau tidak ada pengecualian run-time.
Di sini Delegasi ditambahkan menggunakan operator + = dan dihapus menggunakan operator - =.
Jenis delegasi berasal dari kelas Delegasi di .NET Framework. Jenis delegasi disegel — mereka tidak dapat diturunkan. Karena delegasi instantiated adalah objek, ia dapat dikirimkan sebagai parameter, atau ditugaskan ke properti. Ini memungkinkan metode untuk menerima delegasi sebagai parameter, dan memanggil delegasi di lain waktu. Ini dikenal sebagai panggilan balik asinkron.
sumber
Penjelasan yang bagus dan implementasi praktis dari pola Delegasi dapat ditemukan di Kelas Penerusan Koleksi Google (juga, pola Dekorator).
sumber
Dalam komunikasi Acara, pengirim tidak tahu objek mana yang akan menangani acara. Delegasi adalah tipe yang memegang referensi metode. Delegasi memiliki tanda tangan dan memegang referensi ke metode yang cocok dengan tanda tangannya sehingga Delegasi seperti pointer fungsi yang aman.
button1.Click + = System.EventHandler baru (button1_Click) System.EventHandler dinyatakan sebagai delegasi di sini. Dalam .net Events bekerja pada konsep Delegate (seperti Tombol Klik)
Delegasi digunakan ketika Anda tidak tahu kode mana yang harus dipanggil pada saat dijalankan Jadi pada saat itu Delegasi digunakan untuk menangani Acara
http://msdn.microsoft.com/en-us/library/ms173171(v=vs.80).aspx
sumber
Sebuah objek delegasi adalah obyek yang objek lain berkonsultasi ketika sesuatu terjadi dalam objek itu. Misalnya, petugas perbaikan Anda adalah delegasi Anda jika terjadi sesuatu pada mobil Anda. Anda pergi ke bengkel Anda dan memintanya untuk memperbaiki mobil untuk Anda (walaupun beberapa lebih suka memperbaiki mobil sendiri, dalam hal ini, mereka adalah delegasi mereka sendiri untuk mobil mereka).
sumber
Delegasi adalah objek yang mewakili pointer ke suatu fungsi. Namun, ini bukan penunjuk fungsi biasa karena:
1) Berorientasi Objek
2) Apakah aman, yaitu hanya dapat menunjuk ke suatu metode dan Anda tidak dapat membaca alamat memori mentah yang ditunjuknya
3) Sangat diketik. Itu hanya bisa menunjuk ke metode yang cocok dengan tanda tangannya.
4) Dapat menunjuk lebih dari satu metode pada saat yang bersamaan.
sumber
Delegasi terutama digunakan dengan acara.
Kebutuhannya adalah:
Anda tidak ingin mengeksekusi sepotong kode pada saat Anda menjalankan program. Setelah menjalankan program, Anda ingin menjalankan potongan kode itu setiap kali suatu peristiwa terjadi.
Contoh:
Inilah yang mereka katakan, Anda tidak tahu metode mana yang akan dipanggil pada waktu kompilasi. Anda tahu itu hanya saat runtime saat mengklik tombol.
Tanpa delegasi, pemrograman antarmuka pengguna tidak dimungkinkan. Karena Anda mengeksekusi kode setiap kali pengguna membuat acara yang mengklik tombol, mengetik di kotak teks, memilih item dropdownlist dan seterusnya ....
sumber
Delegasi adalah sesuatu yang tugasnya didelegasikan. Tujuan utama delegasi adalah untuk memisahkan kode dan memungkinkan fleksibilitas dan penggunaan kembali yang lebih besar.
Dalam pemrograman, dan khususnya pemrograman berorientasi objek, ini berarti bahwa ketika suatu metode dipanggil untuk melakukan beberapa pekerjaan, ia meneruskan pekerjaan ke metode objek lain yang memiliki referensi untuk itu. Referensi dapat menunjuk ke objek apa pun yang kita inginkan, selama objek tersebut sesuai dengan serangkaian metode yang telah ditentukan. Kami menyebutnya "pemrograman ke antarmuka" (versus pemrograman ke implementasi kelas konkret). Antarmuka pada dasarnya adalah template umum dan tidak memiliki implementasi; itu hanya berarti resep, seperangkat metode, prasyarat dan postkondisi (aturan).
Contoh sederhana:
Sekarang Anda lihat saya dapat menggunakan implementasi apa pun yang saya inginkan kapan saja tanpa mengubah kode di SomeCaller karena jenis yang
doIt()
dilewatkan tidak konkret melainkan abstrak karena merupakan antarmuka. Di dunia Java, ini sering dinyatakan dalam paradigma layanan tempat Anda memanggil layanan (objek yang mengiklankan dirinya sebagai layanan melalui antarmuka tertentu) dan layanan kemudian memanggil delegasi untuk membantunya melakukan tugasnya. Metode layanan ini dinamai tugas kasar (makePayment (), createNewUser (), dll.), Sementara secara internal banyak melakukan hal-hal sepele jika bekerja melalui delegasi, dengan tipe delegasi yang menjadi antarmuka alih-alih implementasi konkret.(NB: Bagaimana implementasi ditugaskan di luar lingkup utas ini. Pencarian inversi kontrol dan injeksi ketergantungan.)
sumber
Meskipun bukan "penunjuk fungsi" yang sebenarnya, delegasi mungkin terlihat seperti ini adalah bahasa yang dinamis seperti PHP:
atau dalam JavaScript Anda dapat melakukan sesuatu seperti:
sumber