Sugira uma prática recomendada para criar a classe Constants

25

Há um debate entre os membros da minha equipe sobre a declaração de uma classe Constantes. Estamos movendo as variáveis ​​constantes para uma classe separada, como abaixo.

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

Alguns membros da minha equipe sugeriram que declarássemos a classe como selada para evitar a opção de substituição, e alguns estão sugerindo que a marcássemos como estática para evitar a criação de instância da classe Constant.
No entanto, prefiro tê-lo como Sealed com um construtor estático, pois ele nos ajudará a inicializar as variáveis ​​somente leitura em futuras necessidades. Por favor, dê-nos alguns conselhos sobre isso.

user46506
fonte
Independentemente do que você vá, uma consideração pode ser usar uma interface no sistema, em vez das próprias classes de constantes, para evitar dependências entre os objetos e uma classe de tipo "Global" ???
dreza
Então você concorda em tornar a classe estática e apenas perguntar se deve adicionar um construtor estático agora ou mais tarde? Não vejo opiniões opostas na sua pergunta, por favor, esclareça.
Doc Brown
2
Eu não entendi sua pergunta. Se uma classe não tiver membros da instância, você poderá marcá-la static. Isso é completamente ortogonal à presença ou ausência de um construtor estático.
CodesInChaos
1
Suas constantes são realmente constantes no sentido matemático ou isso é uma forma de configuração?
CodesInChaos

Respostas:

31

Não está totalmente claro qual é a sua pergunta, mas se os valores forem realmente constantes, não vejo problema com a simples opção de:

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

O uso staticna declaração de classe indica sua intenção para o propósito desta classe.

Marc Gravell descreve alguns dos possíveis problemas com constantes nesta resposta do Stack Overflow . Somente você saberá se há algum problema na sua base de código, mas se os valores puderem mudar, use em public static readonlyvez de const, caso contrário, qualquer código referente às constantes precisará ser reconstruído se os valores mudarem.

jcorcoran
fonte
1
Uma das advertências que você pode encontrar usando variáveis ​​const é explicada claramente aqui . Como as bases de código tendem a crescer e se tornar mais complexas, é melhor evitar o uso const, o ganho de desempenho geralmente não vale os riscos de possíveis problemas no futuro, IMHO. Eu prefiro usar public static readonlyvariáveis ​​para constantes.
joanlofe 7/03