Jawaban:
Delegasi adalah tipe bernama yang mendefinisikan jenis metode tertentu. Sama seperti definisi kelas yang menjabarkan semua anggota untuk jenis objek tertentu yang didefinisikannya, delegasi menjabarkan tanda tangan metode untuk jenis metode yang didefinisikannya.
Berdasarkan pernyataan ini, delegasi adalah penunjuk fungsi dan mendefinisikan seperti apa fungsi itu.
Contoh bagus untuk penerapan delegasi di dunia nyata adalah Predikat . Dalam contoh dari tautan, Anda akan melihat bahwa Array.Find mengambil array untuk mencari dan kemudian predikat untuk menangani kriteria dari apa yang harus ditemukan. Dalam hal ini, ia melewati metode ProductGT10 yang cocok dengan tanda tangan Predikat.
Seperti yang dinyatakan dalam "Belajar C # 3.0: Menguasai dasar-dasar C # 3.0"
Skenario Umum: Ketika seorang kepala negara meninggal, Presiden Amerika Serikat biasanya tidak punya waktu untuk menghadiri pemakaman secara pribadi. Sebaliknya, dia mengirimkan seorang delegasi. Seringkali delegasi ini adalah Wakil Presiden, tetapi terkadang Wakil Presiden berhalangan dan Presiden harus mengirim orang lain, seperti Sekretaris Negara atau bahkan Ibu Negara. Dia tidak ingin “mengikat” otoritas yang didelegasikannya kepada satu orang; dia mungkin mendelegasikan tanggung jawab ini kepada siapa saja yang mampu melaksanakan protokol internasional yang benar.
Presiden menetapkan terlebih dahulu tanggung jawab apa yang akan didelegasikan (menghadiri pemakaman), parameter apa yang akan diteruskan (belasungkawa, kata-kata baik), dan nilai apa yang ia harapkan (niat baik). Dia kemudian menugaskan orang tertentu ke tanggung jawab yang didelegasikan itu pada "runtime" seiring jalannya masa kepresidenannya.
Dalam Skenario Pemrograman: Anda sering dihadapkan pada situasi di mana Anda perlu menjalankan tindakan tertentu, tetapi Anda tidak tahu sebelumnya metode mana, atau bahkan objek mana, yang ingin Anda panggil untuk menjalankannya.
Sebagai Contoh: Sebuah tombol mungkin tidak mengetahui objek atau objek mana yang perlu diberitahukan. Daripada memasang kabel tombol ke objek tertentu, Anda akan menghubungkan tombol ke delegasi dan kemudian menyelesaikan delegasi itu ke metode tertentu saat program dijalankan.
Satu penggunaan umum delegasi untuk Daftar generik adalah melalui delegasi Tindakan (atau padanan anonimnya) untuk membuat operasi satu baris untuk setiap operasi:
myList.Foreach( i => i.DoSomething());
Saya juga menemukan delegasi Predikat cukup berguna dalam mencari atau memangkas Daftar:
myList.FindAll( i => i.Name == "Bob");
myList.RemoveAll( i => i.Name == "Bob");
Saya tahu Anda mengatakan tidak ada kode yang diperlukan, tetapi saya merasa lebih mudah untuk mengungkapkan kegunaannya melalui kode. :)
Jika Anda tertarik untuk melihat bagaimana pola Delegasi digunakan dalam kode dunia nyata, tidak terlihat lagi selain Cocoa di Mac OS X. Cocoa adalah perangkat UI pilihan Apple untuk pemrograman di bawah Mac OS X, dan dikodekan di Objective C. Ini dirancang sedemikian rupa sehingga setiap komponen UI dimaksudkan untuk diperluas melalui pendelegasian daripada membuat subkelas atau cara lain.
Untuk informasi lebih lanjut, saya sarankan untuk memeriksa apa yang dikatakan Apple tentang delegasi di sini .
Saya memiliki proyek yang menggunakan win32 Python.
Karena berbagai alasan, beberapa modul menggunakan odbc.py untuk mengakses DB, dan modul lainnya - pyodbc.py.
Ada masalah saat suatu fungsi harus digunakan oleh kedua jenis modul. Itu memiliki objek koneksi yang diteruskan ke sana sebagai argumen, tetapi kemudian harus tahu apakah akan menggunakan dbi.dbiDate atau datetime untuk mewakili waktu.
Ini karena odbc.py diharapkan, sebagai nilai dalam pernyataan SQL, tertanggal sebagai dbi.dbiDate sedangkan pyodbc.py mengharapkan nilai datetime.
Satu komplikasi lebih lanjut adalah bahwa objek koneksi yang dibuat oleh odbc.py dan pyodbc.py tidak mengizinkan seseorang untuk menyetel bidang tambahan.
Solusi saya adalah membungkus objek koneksi yang dikembalikan oleh odbc.odbc (...) dan pyodbc.pyodbc (...) oleh kelas delegasi, yang berisi fungsi representasi waktu yang diinginkan sebagai nilai bidang tambahan, dan yang mendelegasikan semua permintaan bidang lainnya ke objek koneksi asli.
Saya memiliki pertanyaan yang sama dengan Anda dan pergi ke situs ini untuk mendapatkan jawaban.
Rupanya, saya tidak memahaminya dengan lebih baik meskipun saya membaca sekilas contoh di utas ini.
Saya menemukan kegunaan yang bagus untuk delegasi sekarang setelah saya membaca: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx
Ini mungkin tampak lebih jelas bagi pengguna baru karena Formulir jauh lebih rumit untuk meneruskan nilai daripada situs web ASP.NET dengan POST / GET (QueryString) ..
Pada dasarnya Anda menentukan delegasi yang menggunakan " teks TextBox " sebagai parameter.
// Formulir1
// Class Property Definition
public delegate void delPassData(TextBox text);
// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
Form2 frm= new Form2();
delPassData del=new delPassData(frm.funData);
del(this.textBox1);
frm.Show();
}
// RINGKASAN: Tentukan delegasi, buat instance kelas Form2 baru, tetapkan fungsi funData () untuk mendelegasikan, teruskan textBox Anda ke delegasi. Tunjukkan formulirnya.
// Formulir2
public void passData(TextBox txtForm1)
{
label1.Text = txtForm1.Text;
}
// RINGKASAN: Cukup gunakan TextBox txtForm1 sebagai parameter (seperti yang didefinisikan dalam delegasi Anda) dan tetapkan teks label ke teks textBox.
Saya harap ini mencerahkan beberapa penggunaan pada delegasi :) ..
Pencarian cepat google muncul dengan http://en.wikipedia.org/wiki/Delegation_pattern ini . Pada dasarnya, kapan pun Anda menggunakan objek yang meneruskan panggilannya ke objek lain, maka Anda mendelegasikannya.