Zaproponuj najlepszą praktykę tworzenia klasy Constants

25

Między członkami mojego zespołu trwa debata na temat deklaracji klasy Constants. Przenosimy zmienne stałe do osobnej klasy, jak poniżej.

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

Kilku członków mojego zespołu zasugerowało, aby zadeklarować klasę jako zapieczętowaną, aby uniknąć zastąpienia opcji, a niektórzy sugerują, aby oznaczyć ją jako statyczną, aby uniknąć tworzenia instancji klasy Constant.
Jednak wolę mieć to jako zamknięte z konstruktorem statycznym, ponieważ pomoże nam to zainicjować zmienne tylko do odczytu w przyszłości. Proszę dać nam kilka rad na ten temat.

użytkownik46506
źródło
Niezależnie od tego, co wybierzesz, jednym z rozważań może być użycie interfejsu w systemie zamiast samej klasy stałych, aby uniknąć zależności między obiektami a klasą typu „globalnego” ???
dreza
Zgadzasz się więc uczynić klasę statyczną i po prostu pytasz, czy powinieneś dodać statycznego konstruktora teraz czy później? Nie widzę żadnych przeciwnych opinii w twoim pytaniu, proszę wyjaśnij.
Doc Brown
2
Nie dostaję twojego pytania. Jeśli klasa nie ma członków instancji, możesz ją oznaczyć static. Jest to całkowicie ortogonalne wobec obecności lub braku statycznego konstruktora.
CodesInChaos
1
Czy twoje stałe są stałymi w sensie matematycznym, czy jest to forma konfiguracji?
CodesInChaos

Odpowiedzi:

31

Nie jest do końca jasne, jakie jest twoje pytanie, ale jeśli wartości są naprawdę stałe, nie widzę problemu z prostą opcją:

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

Użycie staticw deklaracji klasy sygnalizuje twój zamiar dla celów tej klasy.

Marc Gravell opisuje niektóre potencjalne problemy ze stałymi w tej odpowiedzi Przepełnienie stosu . Tylko ty będziesz wiedział, czy są to problemy w twojej bazie kodu, ale jeśli wartości mogą kiedykolwiek ulec zmianie, użyj public static readonlyzamiast const, w przeciwnym razie kod odnoszący się do stałych będzie musiał zostać odbudowany, jeśli wartości się zmienią.

jcorcoran
źródło
1
Jedno z ostrzeżeń, które można znaleźć za pomocą zmiennych const, jest tutaj wyraźnie wyjaśnione . Ponieważ bazy kodowe mają tendencję do powiększania się i komplikowania, lepiej unikać ich używania, dlatego zwiększenie constwydajności zwykle nie jest warte ryzyka potencjalnego problemu w przyszłości, IMHO. Wolę używać public static readonlyzmiennych dla stałych.
joanlofe