Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
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.
Enum adalah jenis nilai khusus. Ada dua jenis enum: enum sederhana dan enum bendera.
Enum sederhana mewakili sekumpulan pilihan tertutup kecil. Contoh umum enum sederhana adalah sekumpulan warna.
Enum bendera dirancang untuk mendukung operasi bit-bit pada nilai enum. Contoh umum enum bendera adalah daftar opsi.
✔️ Gunakan enum untuk menguatkan tipe parameter, properti, dan nilai pengembalian yang merepresentasikan kumpulan nilai.
✔️ DO mendukung penggunaan enum alih-alih konstanta statis.
❌ JANGAN gunakan enum untuk set terbuka (seperti versi sistem operasi, nama teman Anda, dll.).
❌ JANGAN menyediakan nilai enum cadangan untuk penggunaan di masa depan.
Anda selalu dapat menambahkan nilai ke enum yang ada di tahap selanjutnya. Lihat Menambahkan Nilai ke Enum untuk detail selengkapnya tentang menambahkan nilai ke enum. Nilai cadangan hanya mencemari kumpulan nilai nyata dan cenderung menyebabkan kesalahan pengguna.
❌ HINDARI mengekspos enum secara publik hanya dengan satu nilai.
Praktik umum untuk memastikan ekstensibilitas API C di masa mendatang adalah menambahkan parameter cadangan ke signatur metode. Parameter cadangan tersebut dapat dinyatakan sebagai enum dengan satu nilai default. Ini tidak boleh dilakukan di API terkelola. Kelebihan muatan metode memungkinkan penambahan parameter dalam rilis mendatang.
❌ JANGAN sertakan nilai sentinel dalam enum.
Meskipun terkadang membantu pengembang kerangka kerja, nilai sentinel membingungkan pengguna kerangka kerja. Ini digunakan untuk melacak status enum dan bukan menjadi salah satu nilai dari set yang diwakili oleh enum.
✔️ DO memberikan nilai nol pada enum sederhana.
Pertimbangkan untuk memanggil nilai seperti "Tidak Ada." Jika nilai seperti itu tidak sesuai untuk enum khusus ini, nilai default paling umum untuk enum harus diberi nilai nol yang mendasar.
✔️ PERTIMBANGKAN untuk menggunakan Int32 (default dalam sebagian besar bahasa pemrograman) sebagai jenis enum yang mendasar kecuali salah satu dari berikut ini benar:
Enum adalah enum bendera dan Anda memiliki lebih dari 32 bendera, atau berharap untuk memiliki lebih banyak di masa depan.
Tipe dasar harus berbeda dari Int32 untuk memudahkan interoperabilitas dengan kode yang tidak dikelola yang memerlukan enum dengan ukuran berbeda.
Tipe dasar yang lebih kecil akan mengakibatkan penghematan substansial dalam ruang. Jika Anda mengharapkan enum digunakan terutama sebagai argumen untuk aliran kontrol, ukurannya membuat sedikit perbedaan. Penghematan ukuran mungkin signifikan jika:
Anda mengharapkan enum digunakan sebagai bidang dalam struktur atau kelas yang sangat sering diinisialisasi.
Anda mengharapkan pengguna membuat array atau koleksi besar dari instans enum.
Anda mengharapkan sejumlah besar instans enum diserialisasikan.
Untuk penggunaan dalam memori, ketahuilah bahwa objek terkelola selalu DWORD diselaraskan, sehingga Anda secara efektif memerlukan beberapa enum atau struktur kecil lainnya dalam sebuah instans untuk mengemas enum yang lebih kecil agar membuat perbedaan, karena ukuran instans total selalu akan dibulatkan ke DWORD.
✔️ Enum bendera nama DO dengan kata benda jamak atau frasa kata benda dan enum sederhana dengan kata benda tunggal atau frasa kata benda.
❌ JANGAN memperpanjang System.Enum secara langsung.
System.Enum adalah jenis khusus yang digunakan oleh CLR untuk membuat enumerasi yang ditentukan pengguna. Sebagian besar bahasa pemrograman menyediakan elemen pemrograman yang memberi Anda akses ke fungsionalitas ini. Misalnya, di C# enum kata kunci digunakan untuk menentukan enumerasi.
Merancang Enum Bendera
✔️ DO menerapkan System.FlagsAttribute pada enum penanda. Jangan terapkan atribut ini ke enum sederhana.
✔️ DO gunakan pangkat dua untuk nilai enum bendera sehingga dapat digabungkan dengan bebas menggunakan operasi bitwise OR.
✔️ PERTIMBANGKAN untuk memberikan nilai enum khusus untuk kombinasi bendera yang umum digunakan.
Operasi bitwise adalah konsep lanjutan dan tidak boleh diperlukan untuk tugas sederhana. ReadWrite adalah contoh nilai khusus seperti itu.
❌ MENGHINDARI pembuatan enum bendera di mana kombinasi nilai tertentu tidak valid.
❌ AVOID menggunakan nilai enum bendera nol kecuali nilai mewakili "semua bendera dibersihkan" dan dinamai dengan tepat, seperti yang ditentukan oleh pedoman berikutnya.
✔️ Berilah nama nilai zero dari enum tipe bendera None. Untuk enum bendera, nilai harus selalu berarti "semua bendera dibersihkan."
Menambahkan Nilai ke Enum
Sangat umum untuk menemukan bahwa Anda perlu menambahkan nilai ke enum setelah Anda mengirimkannya. Ada potensi masalah kompatibilitas aplikasi ketika nilai yang baru ditambahkan dikembalikan dari API yang ada, karena aplikasi yang ditulis dengan buruk mungkin tidak menangani nilai baru dengan benar.
✔️ PERTIMBANGKAN untuk menambahkan nilai ke enum, meskipun ada risiko kompatibilitas kecil.
Jika Anda memiliki data nyata tentang ketidaksesuaian aplikasi yang disebabkan oleh penambahan enum, pertimbangkan untuk menambahkan API baru yang mengembalikan nilai baru dan lama, dan menghentikan API lama, yang akan terus mengembalikan hanya nilai lama. Ini akan memastikan bahwa aplikasi Anda yang ada tetap kompatibel.
© Sebagian 2005, 2009 Microsoft Corporation. Seluruh hak cipta dilindungi.
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 oleh Krzysztof Cwalina dan Brad Abrams, diterbitkan 22 Okt 2008 oleh Addison-Wesley Professional sebagai bagian dari Seri Pengembangan Microsoft Windows.