Sugerir una práctica recomendada para crear la clase Constantes

25

Hay un debate entre los miembros de mi equipo sobre la declaración de una clase de Constantes. Estamos moviendo las variables constantes a una clase separada como a continuación.

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

Algunos de los miembros de mi equipo sugirieron que declaremos la clase como sellada para evitar la opción de anulación, y algunos sugieren que la marquemos como estática para evitar la creación de instancias de la clase Constant.
Sin embargo, prefiero tenerlo sellado con un constructor estático, ya que nos ayudará a inicializar las variables de solo lectura en futuras necesidades. Por favor, danos un consejo sobre esto.

usuario46506
fuente
Independientemente de lo que elija, una consideración podría ser utilizar una interfaz en el sistema en lugar de la clase de constantes para evitar dependencias entre los objetos y una clase de tipo "Global".
dreza
¿Entonces está de acuerdo en hacer que la clase sea estática y solo pregunta si debe agregar un constructor estático ahora o más tarde? No veo opiniones opuestas en su pregunta, por favor aclare.
Doc Brown
2
No entiendo tu pregunta. Si una clase no tiene miembros de instancia, puede marcarla static. Esto es completamente ortogonal a la presencia o ausencia de un constructor estático.
CodesInChaos
1
¿Son sus constantes realmente constantes en el sentido matemático, o es esta una forma de configuración?
CodesInChaos

Respuestas:

31

No está del todo claro cuál es su pregunta, pero si los valores son realmente constantes, no veo ningún problema con la simple opción de:

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

El uso staticen la declaración de clase indica su intención para el propósito de esta clase.

Marc Gravell describe algunos de los posibles problemas con las constantes en esta respuesta de desbordamiento de pila . Solo usted sabrá si estos son un problema en su base de código, pero si los valores alguna vez pueden cambiar, use en public static readonlylugar de const, de lo contrario, cualquier código que haga referencia a las constantes deberá reconstruirse si los valores cambian.

jcorcoran
fuente
1
Aquí se explica claramente una de las advertencias que puede encontrar utilizando variables const . Dado que las bases de código tienden a crecer y a volverse más complejas, es mejor evitar el uso const, por lo general, la ganancia de rendimiento no compensa los riesgos de posibles problemas en el futuro, en mi humilde opinión. Prefiero usar public static readonlyvariables para constantes.
joanlofe