¿Cuál es la diferencia entre estático y constante en C#?
Todos sabemos que const y static readonly son muy similares: acceso a través de nombres de clases en lugar de nombres de objetos, solo lectura en el programa, etc. En la mayoría de los casos se pueden mezclar.
La diferencia esencial entre los dos es que el valor de const se determina durante la compilación, por lo que su valor solo se puede especificar mediante una expresión constante en el momento de la declaración. La función de solo lectura estática calcula su valor en tiempo de ejecución, por lo que también se puede asignar mediante un constructor estático.
Al comprender esta diferencia esencial, no nos resulta difícil ver si static readonly y const son intercambiables en la siguiente declaración:
1. ;
2. MyClass myins de solo lectura estática = null;
3. Solo lectura estática A = B * 20;
Solo lectura estática B = 10;
4. static readonly int [] constIntArray = new int[] {1, 2, 3};
5.
const int a = 10;
...
}
1: No se puede reemplazar por const. El nuevo operador necesita ejecutar el constructor, por lo que no se puede determinar durante la compilación
2: se puede reemplazar por const. También vemos que las constantes de tipo Referencia (excepto Cadena) solo pueden ser Nulas.
3: Se puede cambiar a constante. Podemos decir claramente durante la compilación que A es igual a 200.
4: No se puede reemplazar por const. El principio es el mismo que el de 1, aunque parece que la matriz de 1, 2 y 3 es de hecho una constante.
5: No se puede cambiar a solo lectura. Solo lectura solo se puede usar para modificar los campos de la clase, no las variables locales ni otros miembros de la clase, como las propiedades.