Sarankan praktik terbaik untuk membuat kelas Konstanta

25

Ada perdebatan di antara anggota tim saya tentang deklarasi kelas Konstanta. Kami memindahkan variabel konstan ke kelas terpisah seperti di bawah ini.

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

Beberapa anggota tim saya menyarankan agar kami mendeklarasikan kelas sebagai disegel untuk menghindari opsi pengesampingan, dan beberapa menyarankan agar kami menandainya sebagai statis untuk menghindari pembuatan instance kelas Konstan.
Namun, saya lebih suka memilikinya sebagai Disegel dengan konstruktor statis, karena itu akan membantu kita untuk menginisialisasi variabel read-only dalam kebutuhan masa depan. Tolong beri kami saran tentang ini.

pengguna46506
sumber
Apa pun yang Anda pergi, satu pertimbangan bisa menggunakan antarmuka dalam sistem daripada kelas konstanta itu sendiri untuk menghindari ketergantungan antara objek dan kelas tipe "Global" ???
dreza
Jadi Anda setuju membuat kelas statis dan hanya bertanya apakah Anda harus menambahkan konstruktor statis sekarang atau nanti? Saya tidak melihat pendapat yang bertentangan dalam pertanyaan Anda, mohon klarifikasi.
Doc Brown
2
Saya tidak mendapatkan pertanyaan Anda. Jika suatu kelas tidak memiliki anggota instance, Anda dapat menandainya static. Ini sepenuhnya ortogonal dengan ada atau tidak adanya konstruktor statis.
CodesInChaos
1
Apakah konstanta Anda benar-benar konstanta dalam arti matematika, atau apakah ini bentuk konfigurasi?
CodesInChaos

Jawaban:

31

Tidak sepenuhnya jelas apa pertanyaan Anda, tetapi jika nilainya benar-benar konstan, saya tidak melihat masalah dengan opsi sederhana:

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

Menggunakan staticdalam deklarasi kelas menandakan niat Anda untuk tujuan kelas ini.

Marc Gravell menjelaskan beberapa masalah potensial dengan konstanta dalam jawaban Stack Overflow ini . Hanya Anda yang akan tahu apakah ini merupakan masalah dalam basis kode Anda, tetapi jika nilainya dapat berubah, gunakan public static readonlyalih-alih const, jika tidak, kode apa pun yang merujuk ke konstanta perlu dibangun kembali jika nilainya berubah.

jcorcoran
sumber
1
Salah satu peringatan yang dapat Anda temukan menggunakan variabel const dijelaskan dengan jelas di sini . Karena basis kode cenderung tumbuh dan semakin kompleks, lebih baik untuk menghindari penggunaan const, peningkatan kinerja biasanya tidak sebanding dengan risiko potensi masalah di masa depan, IMHO. Saya lebih suka menggunakan public static readonlyvariabel untuk konstanta.
joanlofe