Saya sedang membaca beberapa enum dan menemukan mereka sangat mirip dengan mendeklarasikan konstanta. Bagaimana saya tahu kapan harus menggunakan konstanta daripada enum atau sebaliknya. Apa saja keuntungan menggunakan enum?
c#
language-agnostic
enums
Draco
sumber
sumber
Jawaban:
Gunakan enum ketika Anda ingin menentukan rentang nilai yang bisa dimiliki sesuatu. Warna adalah contoh nyata seperti:
Atau mungkin serangkaian kemungkinan hal seperti: (Contoh yang saya curi dari sini karena saya malas)
Konstanta harus untuk nilai tunggal, seperti PI. Tidak ada rentang nilai PI, yang ada hanya PI.
Hal lain yang perlu dipertimbangkan adalah:
sumber
.ToString()
banyak enum, nilai apa pun dalam menggunakan kelas dengan string const yang terlihat dan bertindak seperti enum tetapi menghindari panggilan keToString()
? ContohType Safety"
Apa yang hilang dari jawaban lain adalah bahwa enum memiliki tipe basis integer. Anda dapat mengubah default dari int ke tipe integral lainnya kecuali char seperti:
Anda bisa mentransmisikan secara eksplisit dari dan secara implisit ke tipe dasar, yang berguna dalam pernyataan switch. Berhati-hatilah bahwa seseorang dapat mentransmisikan nilai apa pun dari tipe dasar ke enum, meskipun enum tersebut tidak memiliki anggota dengan nilai yang sesuai. Jadi selalu menggunakan bagian default di sakelar adalah ide yang bagus. BTW, .NET sendiri memungkinkan bahkan enum bernilai floating point, tetapi Anda tidak dapat mendefinisikannya di C #, meskipun saya pikir Anda masih dapat menggunakannya (kecuali di switch).
Selain itu, menggunakan enum memberi Anda lebih banyak keamanan tipe. Jika Anda berniat untuk menggunakan misalnya int konstanta sebagai parameter metode, maka saya bisa memanggil metode dengan nilai int apapun. Memang, melalui casting itu bisa terjadi dengan enum juga, tapi itu tidak akan terjadi secara tidak sengaja. Lebih buruk lagi adalah kemungkinan untuk mengacaukan urutan parameter.
Jika konstanta A hanya dapat berubah menjadi a dan konstanta B hanya dapat berubah menjadi b, maka menggunakan dua jenis enum yang berbeda akan mengungkap penyalahgunaan selama kompilasi.
sumber
Konstanta adalah fitur bahasa yang mengatakan bahwa variabel tidak akan mengubah nilai (sehingga kompilator dapat melakukan pengoptimalan seputar pengetahuan itu) di mana enum adalah tipe tertentu.
Konstanta bisa berupa tipe data apa pun, tetapi enum adalah enum.
Saya menggunakan enum di mana saja Anda dapat memiliki sejumlah opsi dan ingin meningkatkan keterbacaan kode. yaitu Anda bisa memiliki tingkat jejak sebagai int dengan nilai 0, 1, 2 atau sebagai enum sebagai kesalahan, peringatan dan info.
Enum's juga memiliki kemampuan untuk digunakan sebagai operator bitwise, yaitu FontStyle.Bold | FontStyle.Italic akan memberi Anda font tebal dan miring.
sumber
Selain jawaban Robert:
Gunakan enum untuk kumpulan nilai bernama yang terbatas. Anda tidak terlalu peduli dengan nilai numerik di balik setiap simbol (tetapi Anda masih memiliki kemampuan untuk memaksakannya, misalnya untuk kompatibilitas dengan sistem lama).
Robert: Ya, Enum dapat digunakan sebagai bidang bit. Gunakan atribut Flags (dan pastikan anggota enum memiliki nilai numerik yang sesuai).
sumber
Konstanta AC # mirip dengan variabel karena memberikan nama yang ditentukan ke suatu nilai. Namun, konstanta berbeda dari variabel standar karena setelah ditentukan, nilai yang ditetapkan ke konstanta tidak pernah dapat diubah. Manfaat utama konstanta adalah bantuannya dalam membuat kode yang mendokumentasikan sendiri serta memungkinkan deklarasi nilai-nilai kunci di satu tempat, yang memungkinkan perawatan yang mudah jika nilainya perlu diperbarui dan perangkat lunak dikompilasi ulang.
Sedangkan daftar Pencacah berguna untuk menentukan urutan dan status, terutama bila ada perkembangan alami melalui status tersebut. Ini karena setiap konstanta dalam daftar dapat diformat dan dibandingkan menggunakan nama atau nilainya. Enum juga dapat digunakan untuk menentukan kumpulan nilai valid yang terbatas.
sumber
Satu hal yang saya anggap berguna saat menggunakan
enum
alih-alihconst
adalah Anda dapat mengulang melalui nilai dalamenum
, jauh lebih sulit untuk melakukannya denganconst
nilai.sumber