Fungsi panggilan balik adalah bagian penting dari pemrograman Windows. Jika Anda memiliki latar belakang pemrograman C atau C++, Anda telah menggunakan callback di banyak Windows API. Setelah menambahkan kata kunci AddressOf ke VB, pengembang dan pengembang dapat memanfaatkan API yang dulunya dibatasi. Fungsi panggilan balik sebenarnya adalah penunjuk ke pemanggilan metode, juga dikenal sebagai penunjuk fungsi, yang merupakan fitur pemrograman yang sangat kuat. .NET mengimplementasikan konsep penunjuk fungsi dalam bentuk delegasi. Yang istimewa dari mereka adalah, tidak seperti penunjuk fungsi C, delegasi .NET aman untuk tipe. Hal ini menunjukkan bahwa penunjuk fungsi di C hanyalah penunjuk ke unit penyimpanan. Kita tidak dapat mengetahui apa yang sebenarnya ditunjuk oleh penunjuk ini, apalagi parameter dan tipe kembaliannya. Seperti yang dijelaskan dalam bab ini, delegasi .NET beroperasi sebagai operasi tipe aman. Di bawah ini kita akan mempelajari bagaimana .NET menggunakan delegasi sebagai cara untuk mengimplementasikan acara.
1. Amanah
Saat Anda ingin meneruskan suatu metode ke metode lain, Anda perlu menggunakan delegasi. Untuk memahami maksudnya, lihat kode berikut:
int i = int.Parse("99");
Kita terbiasa meneruskan data sebagai parameter ke metode, seperti yang ditunjukkan pada contoh di atas. Jadi, meneruskan metode lain ke suatu metode terdengar agak aneh. Terkadang operasi yang dilakukan suatu metode tidak dilakukan pada datanya, melainkan pada metode lain yang lebih rumit. Kami tidak mengetahui metode kedua pada waktu kompilasi. Informasi ini hanya dapat diperoleh saat runtime, jadi kami perlu meneruskan metode kedua sebagai parameter ke metode pertama. Ini kedengarannya membingungkan :
1. Mulai thread-----Dalam C#, Anda dapat memberitahu komputer untuk menjalankan urutan eksekusi baru tertentu secara paralel. Urutan ini disebut thread. Gunakan metode Start() pada instance akumulasi System.Threading.Thread untuk mulai mengeksekusi thread. Jika Anda ingin memberitahu komputer untuk memulai urutan eksekusi baru, Anda harus menunjukkan di mana urutan tersebut akan dieksekusi. Komputer harus diberikan rincian metode untuk memulai eksekusi, yaitu metode Thread.Start() harus mengambil parameter yang mendefinisikan metode yang akan dipanggil oleh thread.
2. Kelas perpustakaan umum------Ada banyak perpustakaan yang berisi kode untuk melakukan berbagai tugas standar. Perpustakaan-perpustakaan ini biasanya mandiri. Dengan cara ini, saat menulis perpustakaan, Anda akan mengetahui cara melakukan tugas tersebut. Namun terkadang tugas juga berisi subtugas. Hanya kode klien yang menggunakan perpustakaan yang mengetahui cara melakukan subtugas ini. Misalnya, tulis kelas yang mengambil serangkaian objek dan mengurutkannya dalam urutan menaik. Namun, bagian dari proses pengurutan melibatkan penggunaan kembali dua objek dalam array, membandingkannya untuk melihat mana yang lebih dulu. Jika Anda sedang menulis kelas yang harus bisa mengurutkan array objek apa pun, Anda tidak bisa memberi tahu komputer sebelumnya bagaimana objek tersebut harus dibandingkan. Kode klien yang menangani array objek dalam suatu kelas juga harus memberitahu kelas bagaimana membandingkan objek yang akan diurutkan. Dengan kata lain, kode klien harus meneruskan detail tertentu ke kelas yang menjadikannya sesuai.
3. Peristiwa ------ umumnya memberitahukan kode peristiwa apa yang telah terjadi. Pemrograman GUI terutama tentang menangani peristiwa. Ketika suatu peristiwa terjadi, runtime perlu mengetahui metode mana yang harus dijalankan. Hal ini memerlukan penerusan metode yang menangani waktu sebagai parameter delegasi. Ini akan dibahas nanti.
Sebelumnya kita menetapkan aturan bahwa nama metode terkadang diteruskan sebagai argumen ke metode lain. Di bawah ini perlu ditunjukkan cara menyelesaikan proses ini. Cara paling sederhana adalah dengan meneruskan nama metode sebagai parameter. Misalnya, pada contoh thread sebelumnya, asumsikan thread baru telah dimulai dan terdapat metode bernama EntryPoint(), yang merupakan tempat thread mulai berjalan.
batal Titik Masuk()
{
//lakukan apa pun yang perlu dilakukan oleh thread baru
}
Anda juga dapat menggunakan kode berikut untuk mulai menjalankan thread baru:
Utas Utas Baru = Utas baru();
Thread.Mulai(Titik Masuk); //SALAH
Sebenarnya ini adalah cara yang sangat sederhana, yaitu cara yang digunakan dalam beberapa bahasa seperti C dan C++ (dalam C dan C++, parameter EntryPoint adalah penunjuk fungsi).
Namun pendekatan langsung ini dapat menyebabkan beberapa masalah, seperti keamanan tipe. Saat melakukan pemrograman berorientasi objek, metode jarang ada secara terpisah. Metode tersebut biasanya perlu dikaitkan dengan instance kelas sebelum dipanggil. Dan metode ini tidak memperhitungkan masalah ini. Jadi .NET Framework secara sintaksis tidak mengizinkan pendekatan langsung ini. Jika Anda ingin meneruskan suatu metode, Anda harus merangkum detail metode tersebut dalam tipe objek baru, delegasi. Delegasi hanyalah tipe objek khusus, yang istimewa adalah semua objek yang kita definisikan sebelumnya berisi data, sedangkan delegasi hanya berisi detail metodenya.
-