Bagikan melalui


Desain Peristiwa

Catatan

Konten ini dicetak ulang oleh izin Pearson Education, Inc. dari Panduan Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Pustaka .NET yang Dapat Digunakan Kembali, Edisi ke-2. Edisi itu diterbitkan pada tahun 2008, dan buku tersebut telah sepenuhnya direvisi pada edisi ketiga. Beberapa informasi di halaman ini mungkin sudah kedaluarsa.

Peristiwa adalah bentuk panggilan balik yang paling umum digunakan (konstruksi yang memungkinkan kerangka kerja untuk memanggil kode pengguna). Mekanisme panggilan balik lainnya termasuk anggota yang mengambil delegasi, anggota virtual, dan plug-in berbasis antarmuka. Data dari studi kegunaan menunjukkan bahwa sebagian besar pengembang lebih nyaman menggunakan peristiwa daripada menggunakan mekanisme panggilan balik lainnya. Peristiwa terintegrasi dengan baik dengan Visual Studio dan banyak bahasa.

Penting untuk dicatat bahwa ada dua grup peristiwa: peristiwa yang diangkat sebelum status sistem berubah, yang disebut pra-peristiwa, dan peristiwa yang dimunculkan setelah perubahan status, yang disebut pasca-peristiwa. Contoh pra-peristiwa adalah Form.Closing, yang dimunculkan sebelum formulir ditutup. Contoh pra-peristiwa adalah Form.Closed, yang dimunculkan setelah formulir ditutup.

✔️ DO menggunakan istilah "naikkan" untuk peristiwa daripada "fire" atau "trigger."

✔️ DO menggunakan System.EventHandler<TEventArgs> alih-alih membuat delegasi baru secara manual untuk digunakan sebagai penanganan aktivitas.

✔️ PERTIMBANGKAN untuk menggunakan subkelas EventArgs sebagai argumen peristiwa, kecuali Anda benar-benar yakin peristiwa tersebut tidak perlu membawa data apa pun ke metode penanganan peristiwa, dalam hal ini Anda dapat menggunakan jenisnya EventArgs secara langsung.

Jika Anda mengirim API menggunakan EventArgs secara langsung, Anda tidak akan pernah dapat menambahkan data apa pun untuk dibawa dengan peristiwa tanpa melanggar kompatibilitas. Jika Anda menggunakan subkelas, bahkan jika awalnya benar-benar kosong, Anda akan dapat menambahkan properti ke subkelas saat diperlukan.

✔️ DO menggunakan metode virtual yang dilindungi untuk meningkatkan setiap peristiwa. Ini hanya berlaku untuk peristiwa nonstatis pada kelas yang tidak ditutup, bukan untuk struktur, kelas yang ditutup, atau peristiwa statis.

Tujuan dari metode ini adalah untuk menyediakan cara bagi kelas turunan untuk menangani peristiwa menggunakan penggantian. Mengganti adalah cara yang lebih fleksibel, lebih cepat, dan lebih alami untuk menangani peristiwa kelas dasar di kelas turunan. Menurut konvensi, nama metode harus dimulai dengan "Aktif" dan diikuti dengan nama peristiwa.

Kelas turunan dapat memilih untuk tidak memanggil implementasi dasar metode dalam penggantiannya. Bersiaplah untuk ini dengan tidak menyertakan pemrosesan apa pun dalam metode yang diperlukan agar kelas dasar berfungsi dengan benar.

✔️ DO mengambil satu parameter ke metode yang dilindungi yang memunculkan peristiwa.

Parameter harus diberi nama e dan harus di ketik sebagai kelas argumen peristiwa.

❌ JANGAN meneruskan null sebagai pengirim saat menaikkan peristiwa nonstatis.

✔️ DO meneruskan null sebagai pengirim ketika menaikkan peristiwa statik.

❌ JANGAN meneruskan null sebagai parameter data peristiwa saat menaikkan peristiwa.

Anda harus meneruskan EventArgs.Empty jika Anda tidak ingin meneruskan data apa pun ke metode penanganan peristiwa. Pengembang mengharapkan parameter ini tidak null.

✔️ PERTIMBANGKAN untuk menaikkan peristiwa yang dapat dibatalkan oleh pengguna akhir. Ini hanya berlaku untuk pra-peristiwa.

Gunakan System.ComponentModel.CancelEventArgs atau subkelasnya sebagai argumen peristiwa untuk memungkinkan pengguna akhir membatalkan peristiwa.

Desain Penanganan Aktivitas Kustom

Ada kasus di mana EventHandler<T> tidak dapat digunakan, seperti ketika kerangka kerja perlu bekerja dengan versi CLR yang lebih lama, yang tidak mendukung Generik. Dalam kasus seperti itu, Anda mungkin perlu merancang dan mengembangkan delegasi penanganan aktivitas kustom.

✔️ DO menggunakan jenis pengembalian kekosongan untuk penanganan aktivitas.

Penanganan aktivitas dapat memanggil beberapa metode penanganan peristiwa, mungkin pada beberapa objek. Jika metode penanganan peristiwa diizinkan untuk mengembalikan nilai, akan ada beberapa nilai pengembalian untuk setiap pemanggilan peristiwa.

✔️ DO menggunakan object sebagai jenis parameter pertama penanganan aktivitas, dan sebut saja sender.

✔️ DO menggunakan System.EventArgs atau subkelasnya sebagai jenis parameter kedua dari penanganan aktivitas, dan memanggilnya e.

❌ JANGAN memiliki lebih dari dua parameter pada penanganan aktivitas.

Portions © 2005, 2009 Microsoft Corporation. Semua hak dilindungi undang-undang.

Dicetak ulang dengan izin dari Pearson Education, Inc. dari Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition oleh Krzysztof Cwalina dan Brad Abrams, diterbitkan 22 Okt 2008 oleh Addison-Wesley Professional sebagai bagian dari Seri Pengembangan Microsoft Windows.

Lihat juga