Saya memiliki berbagai konstanta yang digunakan program saya ... string
's, int
' s, double
's, dll ... Apa cara terbaik untuk menyimpannya? Saya tidak berpikir saya menginginkannya Enum
, karena datanya tidak semua jenis yang sama, dan saya ingin mengatur setiap nilai secara manual. Haruskah saya menyimpan semuanya di kelas kosong? Atau apakah ada cara yang lebih baik?
97
Jawaban:
Anda mungkin dapat memilikinya dalam kelas statis, dengan properti hanya baca statis.
sumber
IMO menggunakan kelas yang penuh dengan konstanta tidak masalah untuk konstanta. Jika mereka akan berubah semi-sesekali, saya sarankan menggunakan AppSettings di config Anda dan kelas ConfigurationManager sebagai gantinya.
Ketika saya memiliki "konstanta" yang benar-benar ditarik dari AppSettings atau serupa, saya masih akan selalu memiliki kelas "konstanta" yang membungkus pembacaan dari manajer konfigurasi. Itu selalu lebih bermakna untuk dimiliki
Constants.SomeModule.Setting
daripada harus langsung pergi keConfigurationManager.AppSettings["SomeModule/Setting"]
tempat mana pun yang ingin mengkonsumsi nilai pengaturan tersebut.Poin bonus untuk penyiapan ini, karena
SomeModule
kemungkinan akan menjadi kelas bersarang di dalam file Constants, Anda dapat dengan mudah menggunakan Injeksi Ketergantungan untuk menyuntikkanSomeModule
langsung ke kelas yang bergantung padanya. Anda juga dapat mengekstrak antarmuka di atasSomeModule
dan kemudian membuat ketergantungan keISomeModuleConfiguration
dalam kode konsumsi Anda, ini kemudian akan memungkinkan Anda untuk memisahkan ketergantungan ke file Constants, dan bahkan berpotensi membuat pengujian lebih mudah, terutama jika pengaturan ini berasal dari AppSettings dan Anda mengubahnya menggunakan transformasi konfigurasi karena pengaturannya khusus lingkungan.sumber
Yang ingin saya lakukan adalah sebagai berikut (tetapi pastikan untuk membaca sampai akhir untuk menggunakan jenis konstanta yang tepat ):
Baca ini untuk mengetahui mengapa
const
mungkin bukan yang Anda inginkan. Kemungkinan jenis konstanta adalah:const
bidang. Jangan gunakan di seluruh rakitan (public
atauprotected
) jika nilai mungkin berubah di masa mendatang karena nilai akan di-hardcode pada waktu kompilasi di rakitan lain tersebut. Jika Anda mengubah nilainya, nilai lama akan digunakan oleh rakitan lain sampai mereka dikompilasi ulang.static readonly
bidangstatic
properti tanpaset
sumber
Ini adalah cara terbaik IMO. Tidak perlu properti, atau hanya baca:
sumber
Kelas statis kosong sudah sesuai. Pertimbangkan untuk menggunakan beberapa kelas, sehingga Anda mendapatkan grup konstanta terkait yang bagus, dan bukan satu file Globals.cs raksasa.
Selain itu, untuk beberapa konstanta int, pertimbangkan notasinya:
Karena ini memungkinkan untuk memperlakukan nilai seperti bendera .
sumber
Suara lain untuk menggunakan web.config atau app.config. File konfigurasi adalah tempat yang baik untuk konstanta seperti string koneksi, dll. Saya memilih untuk tidak melihat sumber untuk melihat atau memodifikasi jenis hal ini. Kelas statis yang membaca konstanta ini dari file .config mungkin merupakan kompromi yang baik, karena akan membiarkan aplikasi Anda mengakses sumber daya ini seolah-olah mereka didefinisikan dalam kode, tetapi tetap memberi Anda fleksibilitas untuk memilikinya dalam tampilan yang mudah dilihat / diedit ruang.
sumber
Ya,
static class
konstanta untuk menyimpan akan baik-baik saja, kecuali untuk konstanta yang terkait dengan tipe tertentu.sumber
Jika Konstanta ini adalah referensi layanan atau sakelar yang mempengaruhi perilaku aplikasi, saya akan mengaturnya sebagai pengaturan pengguna Aplikasi. Dengan begitu, jika perlu diubah, Anda tidak perlu mengkompilasi ulang dan Anda masih bisa mereferensikannya melalui kelas properti statis.
sumber
Saya akan menyarankan kelas statis dengan hanya baca statis. Silakan temukan cuplikan kode di bawah ini:
sumber