C # memiliki delegasi untuk tujuan itu. Mereka banyak digunakan dengan acara , karena suatu peristiwa dapat secara otomatis meminta sejumlah delegasi terlampir (penangan acara).
sebenarnya panggilan balik adalah penunjuk ke kode yang dapat dieksekusi yang diteruskan sebagai argumen ke kode lain ... halaman tersebut perlu ditinjau
Gianluca Ghettini
8
@ G_G: Tidak ada yang mengatakan itu harus menjadi pointer. Biasanya karena segmen data tidak dapat dieksekusi, tapi itu secara teknis detail implementasi.
Joey
Joey: kamu benar itu adalah detail implementasi tetapi bahkan callback adalah detail implementasi. Anda dapat menulis ulang kode Anda tanpa menggunakan satu panggilan balik pun. Ini seperti 'sementara' vs 'untuk'.
Gianluca Ghettini
1053
Saya baru saja bertemu dengan Anda,
Dan ini gila,
Tapi ini nomor saya (delegasi),
Jadi jika sesuatu terjadi (peristiwa),
Panggil saya, mungkin (panggilan balik)?
Penjelasan yang sangat keren. Saya akan menggunakan penjelasan ini setiap kali seseorang bertanya, harap saya bisa mendapatkan hak untuk menggunakannya?
Nikola Davidovic
15
+1: Senang. Itu merusak lagu, tetapi seharusnya berbunyi `Tapi ini nomor saya dan instruksi untuk menggunakan tipe ponsel tertentu (delegasi) '
Gone Coding
8
Belajar mendelegasikan dengan Smile di wajah Anda :-)
Aakash
8
Penjelasan terbaik!
zhengtonic
3
Perhatikan bahwa delegasi mengajar kepada orang lain dengan penjelasan itu hanya bekerja dengan koreografi yang bagus :)
Sébastien Sevrin
87
Panggilan balik adalah fungsi yang akan dipanggil ketika suatu proses dilakukan menjalankan tugas tertentu.
Penggunaan panggilan balik biasanya dalam logika asinkron.
Untuk membuat panggilan balik di C #, Anda perlu menyimpan alamat fungsi di dalam variabel. Hal ini dicapai dengan menggunakan delegateatau semantik lambda baru Funcatau Action.
publicdelegatevoidWorkCompletedCallBack(string result);publicvoidDoWork(WorkCompletedCallBack callback){
callback("Hello world");}publicvoidTest(){WorkCompletedCallBack callback =TestCallBack;// Notice that I am referencing a method without its parameterDoWork(callback);}publicvoidTestCallBack(string result){Console.WriteLine(result);}
Di hari ini C #, ini bisa dilakukan menggunakan lambda seperti:
Sebuah callback adalah kode executable yang dilewatkan sebagai argumen untuk kode lain.
Penerapan
// Parent can ReadpublicclassParent{publicstringRead(){/*reads here*/};}// Child need InfopublicclassChild{privatestring information;// declare a DelegatedelegatestringGetInfo();// use an instance of the declared DelegatepublicGetInfoGetMeInformation;publicvoidObtainInfo(){// Child will use the Parent capabilities via the Delegate
information =GetMeInformation();}}
Pemakaian
ParentPeter=newParent();ChildJohny=newChild();// Tell Johny from where to obtain infoJohny.GetMeInformation=Peter.Read;Johny.ObtainInfo();// here Johny 'asks' Peter to read
hai @ hio terima kasih atas jawaban Anda. itu masih agak suram bagi saya: di mana tepatnya kode dilewatkan sebagai argumen ke kode lain Tampaknya menjadi penambahan metode Peter.Read ke delegasi anak?
BKSpurgeon
1
@serhio link mati.
Yudas
10
Panggilan balik adalah penunjuk fungsi yang Anda berikan ke fungsi lain. Fungsi yang Anda panggil akan 'memanggil kembali' (mengeksekusi) fungsi lain ketika telah selesai.
Callback dapat diimplementasikan sebagai delegasi ke suatu metode, tetapi Anda bisa juga mengatakan bahwa meneruskan objek yang mendukung metode callback pada antarmuka adalah callback.
Joe
Array.Sort (arrayObject); memanggil obj.CompareTo (anotherObj) pada elemen-elemen dari arrayObject adalah contoh klasik dari callback menggunakan Interface (ICompareable) di .Net.
Ron5504
8
Jika Anda merujuk ke panggilan balik ASP.Net:
Dalam model default untuk halaman Web ASP.NET, pengguna berinteraksi dengan halaman dan mengklik tombol atau melakukan beberapa tindakan lain yang menghasilkan postback. Halaman dan kontrolnya dibuat kembali, kode halaman berjalan di server, dan versi halaman yang baru diberikan ke browser. Namun, dalam beberapa situasi, berguna untuk menjalankan kode server dari klien tanpa melakukan postback. Jika skrip klien di halaman mempertahankan beberapa informasi status (misalnya, nilai variabel lokal), memposting halaman dan mendapatkan salinan baru akan merusak status itu. Selain itu, postback halaman memperkenalkan pemrosesan overhead yang dapat menurunkan kinerja dan memaksa pengguna untuk menunggu halaman diproses dan dibuat kembali.
Untuk menghindari kehilangan status klien dan tidak perlu memproses overhead dari pulang-pergi server, Anda dapat membuat kode halaman Web ASP.NET sehingga dapat melakukan panggilan balik klien. Dalam panggilan balik klien, fungsi skrip klien mengirim permintaan ke halaman Web ASP.NET. Halaman Web menjalankan versi modifikasi dari siklus hidup normalnya. Halaman dimulai dan kontrolnya dan anggota lain dibuat, dan kemudian metode yang ditandai khusus dipanggil. Metode melakukan pemrosesan yang telah Anda kodekan dan kemudian mengembalikan nilai ke browser yang dapat dibaca oleh fungsi skrip klien lain. Sepanjang proses ini, halaman tersebut aktif di browser.
Callback sering didelegasikan ke metode yang dipanggil ketika operasi tertentu telah menyelesaikan atau melakukan sub-aksi. Anda akan sering menemukannya dalam operasi asinkron. Ini adalah prinsip pemrograman yang dapat Anda temukan di hampir setiap bahasa pengkodean.
classCallBackExample{publicdelegatevoidMyNumber();publicstaticvoidCallMeBack(){Console.WriteLine("He/She is calling you. Pick your phone!:)");Console.Read();}publicstaticvoidMetYourCrush(MyNumber number){int j;Console.WriteLine("is she/he interested 0/1?:");var i =Console.ReadLine();if(int.TryParse(i,out j)){var interested =(j ==0)?false:true;if(interested)//event{//call his/her number
number();}else{Console.WriteLine("Nothing happened! :(");Console.Read();}}}staticvoidMain(string[] args){MyNumber number =Program.CallMeBack;Console.WriteLine("You have just met your crush and given your number");MetYourCrush(number);Console.Read();Console.Read();}}
Penjelasan Kode:
Saya membuat kode untuk mengimplementasikan penjelasan lucu yang diberikan oleh LightStriker di salah satu balasan di atas. Kami memberikan delegasi (angka) ke metode ( MetYourCrush). Jika Tertarik (peristiwa) terjadi dalam metode ( MetYourCrush) maka akan memanggil delegasi (nomor) yang memegang referensi CallMeBackmetode. Jadi, CallMeBackmetode akan dipanggil. Pada dasarnya, kami melewati delegasi untuk memanggil metode panggilan balik.
Tolong beri tahu saya jika Anda memiliki pertanyaan.
Ini tidak cukup menjawab pertanyaan, dapatkah Anda menjelaskan apa yang kode Anda lakukan, untuk menggambarkan cara kerja panggilan balik, dan bagaimana penerapannya dalam C #.
Adam
Hai Adam, Terima kasih atas balasan Anda. Saya membuat kode untuk mengimplementasikan penjelasan lucu yang diberikan oleh LightStriker. Kami memberikan delegasi (angka) ke metode (MetYourCrush). Jika Tertarik (acara) terjadi dalam metode (MetYourCrush) maka akan memanggil delegasi (nomor) yang memegang referensi metode CallMeBack. Jadi, metode CallMeBack akan dipanggil. Pada dasarnya, kami melewati delegasi untuk memanggil metode panggilan balik. Tolong beri tahu saya jika Anda memiliki pertanyaan.
Mani
1
Mungkin bukan definisi kamus, tetapi panggilan balik biasanya merujuk ke fungsi, yang eksternal untuk objek tertentu, disimpan dan kemudian dipanggil pada acara tertentu.
Contohnya adalah ketika tombol UI dibuat, ia menyimpan referensi ke fungsi yang melakukan tindakan. Tindakan ditangani oleh bagian kode yang berbeda tetapi ketika tombol ditekan, panggilan balik dipanggil dan ini meminta tindakan untuk melakukan.
C #, daripada menggunakan istilah 'callback' menggunakan 'acara' dan 'delegasi' dan Anda dapat mengetahui lebih lanjut tentang delegasi di sini .
Panggilan balik memungkinkan Anda memberikan kode yang dapat dieksekusi sebagai argumen ke kode lain. Dalam C dan C ++ ini diimplementasikan sebagai pointer fungsi. Di .NET Anda akan menggunakan delegasi untuk mengelola pointer fungsi.
Beberapa kegunaan termasuk kesalahan pensinyalan dan pengendalian apakah suatu fungsi bertindak atau tidak.
1) dari panggilan UI Fungsi klik panggilan javascript panggilan ONClient untuk EX: - builpopup(p1,p2,p3...)
var finalfield = p1, p2, p3;
UseCallBack(finalfield, ""); data dari klien diteruskan ke sisi server dengan menggunakan UseCallBack
2) public void RaiseCallbackEvent(string eventArgument) Dalam eventArgument, kami mendapatkan data yang diteruskan // lakukan beberapa operasi sisi server dan diteruskan ke "callbackResult"
3) GetCallbackResult() // menggunakan metode ini, data akan dikirimkan ke sisi klien (fungsi ReceiveServerData ())
callbackResult
4) Dapatkan data di sisi klien:,
ReceiveServerData(text) dalam respons server teks, kami akan dapatkan.
Delegasi melakukan hal yang sama dengan callback berbasis antarmuka di C ++ (COM menggunakan ini), meskipun jauh lebih mudah digunakan.
Perhatikan bahwa Microsoft menempatkan delegasi ke dalam implementasi Java-nya (J ++) tetapi Sun tidak menyukainya [java.sun.com] jadi jangan berharap untuk melihatnya dalam versi resmi Java dalam waktu dekat. Saya telah meretas preprocessor untuk membiarkan Anda menggunakannya dalam C ++, jadi jangan merasa tersisih jika Anda tidak memprogram dalam C # atau pada platform .NET (yaitu dalam Managed C ++ atau Visual Basic.NET).
Jika Anda terbiasa memfungsikan pointer dalam C, delegasi pada dasarnya adalah sepasang pointer yang digabung menjadi satu:
Penunjuk ke objek (opsional)
Penunjuk ke metode objek itu
Itu berarti satu delegasi melewati semua informasi yang diperlukan untuk menemukan fungsi dalam program Anda, apakah itu metode statis atau terkait dengan suatu objek.
Anda mendefinisikannya seperti ini di C #:
publicdelegatevoidFooCallbackType(int a,int b,int c );
Saat Anda ingin menggunakannya, Anda membuat delegasi keluar dari fungsi yang ingin Anda panggil:
classCMyClass{publicvoidFunctionToCall(int a,int b,int c ){// This is the callback}publicvoidFoo(){FooCallbackType myDelegate =newFooCallbackType(this.FunctionToCall);// Now you can pass that to the function// that needs to call you back.}}
Jika Anda ingin membuat delegasi untuk menunjuk ke metode statis, itu hanya terlihat sama:
classCMyClassWithStaticCallback{publicstaticvoidStaticFunctionToCall(int a,int b,int c ){// This is the callback}publicstaticvoidFoo(){FooCallbackType myDelegate =newFooCallbackType(CMyClass.StaticFunctionToCall);}}
Secara keseluruhan, mereka melakukan hal yang sama dengan panggilan balik berbasis antarmuka di C ++, tetapi menyebabkan masalah sedikit lebih sedikit karena Anda tidak perlu khawatir tentang penamaan fungsi Anda atau membuat objek pembantu, dan Anda dapat membuat delegasi keluar dari metode apa pun. Mereka lebih fleksibel.
Jawaban:
C # memiliki delegasi untuk tujuan itu. Mereka banyak digunakan dengan acara , karena suatu peristiwa dapat secara otomatis meminta sejumlah delegasi terlampir (penangan acara).
sumber
Saya baru saja bertemu dengan Anda,
Dan ini gila,
Tapi ini nomor saya (delegasi),
Jadi jika sesuatu terjadi (peristiwa),
Panggil saya, mungkin (panggilan balik)?
sumber
Panggilan balik adalah fungsi yang akan dipanggil ketika suatu proses dilakukan menjalankan tugas tertentu.
Penggunaan panggilan balik biasanya dalam logika asinkron.
Untuk membuat panggilan balik di C #, Anda perlu menyimpan alamat fungsi di dalam variabel. Hal ini dicapai dengan menggunakan
delegate
atau semantik lambda baruFunc
atauAction
.Di hari ini C #, ini bisa dilakukan menggunakan lambda seperti:
sumber
Definisi
Penerapan
Pemakaian
Tautan
sumber
Panggilan balik adalah penunjuk fungsi yang Anda berikan ke fungsi lain. Fungsi yang Anda panggil akan 'memanggil kembali' (mengeksekusi) fungsi lain ketika telah selesai.
Lihat tautan ini .
sumber
Jika Anda merujuk ke panggilan balik ASP.Net:
Sumber: http://msdn.microsoft.com/en-us/library/ms178208.aspx
Jika Anda merujuk ke callback dalam kode:
Callback sering didelegasikan ke metode yang dipanggil ketika operasi tertentu telah menyelesaikan atau melakukan sub-aksi. Anda akan sering menemukannya dalam operasi asinkron. Ini adalah prinsip pemrograman yang dapat Anda temukan di hampir setiap bahasa pengkodean.
Info lebih lanjut di sini: http://msdn.microsoft.com/en-us/library/ms173172.aspx
sumber
Dedikasi untuk LightStriker:
Kode Contoh:
Penjelasan Kode:
Saya membuat kode untuk mengimplementasikan penjelasan lucu yang diberikan oleh LightStriker di salah satu balasan di atas. Kami memberikan delegasi (angka) ke metode (
MetYourCrush
). Jika Tertarik (peristiwa) terjadi dalam metode (MetYourCrush
) maka akan memanggil delegasi (nomor) yang memegang referensiCallMeBack
metode. Jadi,CallMeBack
metode akan dipanggil. Pada dasarnya, kami melewati delegasi untuk memanggil metode panggilan balik.Tolong beri tahu saya jika Anda memiliki pertanyaan.
sumber
Mungkin bukan definisi kamus, tetapi panggilan balik biasanya merujuk ke fungsi, yang eksternal untuk objek tertentu, disimpan dan kemudian dipanggil pada acara tertentu.
Contohnya adalah ketika tombol UI dibuat, ia menyimpan referensi ke fungsi yang melakukan tindakan. Tindakan ditangani oleh bagian kode yang berbeda tetapi ketika tombol ditekan, panggilan balik dipanggil dan ini meminta tindakan untuk melakukan.
C #, daripada menggunakan istilah 'callback' menggunakan 'acara' dan 'delegasi' dan Anda dapat mengetahui lebih lanjut tentang delegasi di sini .
sumber
Panggilan balik memungkinkan Anda memberikan kode yang dapat dieksekusi sebagai argumen ke kode lain. Dalam C dan C ++ ini diimplementasikan sebagai pointer fungsi. Di .NET Anda akan menggunakan delegasi untuk mengelola pointer fungsi.
Beberapa kegunaan termasuk kesalahan pensinyalan dan pengendalian apakah suatu fungsi bertindak atau tidak.
Wikipedia
sumber
langkah-langkah kerja panggilan balik:
1) kita harus mengimplementasikan
ICallbackEventHandler
Interface2) Daftarkan skrip klien:
1) dari panggilan UI Fungsi klik panggilan javascript panggilan ONClient untuk EX: -
builpopup(p1,p2,p3...)
var finalfield = p1, p2, p3;
UseCallBack(finalfield, "");
data dari klien diteruskan ke sisi server dengan menggunakan UseCallBack2)
public void RaiseCallbackEvent(string eventArgument)
Dalam eventArgument, kami mendapatkan data yang diteruskan // lakukan beberapa operasi sisi server dan diteruskan ke "callbackResult"3)
GetCallbackResult()
// menggunakan metode ini, data akan dikirimkan ke sisi klien (fungsi ReceiveServerData ())callbackResult
4) Dapatkan data di sisi klien:,
ReceiveServerData(text)
dalam respons server teks, kami akan dapatkan.sumber
Delegasi melakukan hal yang sama dengan callback berbasis antarmuka di C ++ (COM menggunakan ini), meskipun jauh lebih mudah digunakan.
Perhatikan bahwa Microsoft menempatkan delegasi ke dalam implementasi Java-nya (J ++) tetapi Sun tidak menyukainya [java.sun.com] jadi jangan berharap untuk melihatnya dalam versi resmi Java dalam waktu dekat. Saya telah meretas preprocessor untuk membiarkan Anda menggunakannya dalam C ++, jadi jangan merasa tersisih jika Anda tidak memprogram dalam C # atau pada platform .NET (yaitu dalam Managed C ++ atau Visual Basic.NET).
Jika Anda terbiasa memfungsikan pointer dalam C, delegasi pada dasarnya adalah sepasang pointer yang digabung menjadi satu:
Itu berarti satu delegasi melewati semua informasi yang diperlukan untuk menemukan fungsi dalam program Anda, apakah itu metode statis atau terkait dengan suatu objek.
Anda mendefinisikannya seperti ini di C #:
Saat Anda ingin menggunakannya, Anda membuat delegasi keluar dari fungsi yang ingin Anda panggil:
Jika Anda ingin membuat delegasi untuk menunjuk ke metode statis, itu hanya terlihat sama:
Secara keseluruhan, mereka melakukan hal yang sama dengan panggilan balik berbasis antarmuka di C ++, tetapi menyebabkan masalah sedikit lebih sedikit karena Anda tidak perlu khawatir tentang penamaan fungsi Anda atau membuat objek pembantu, dan Anda dapat membuat delegasi keluar dari metode apa pun. Mereka lebih fleksibel.
sumber