usar una que programacion metodos instanciar instancia example estaticos estaticas cuando clases clase c# java const constants final

una - ¿Por qué C#no permite const y estática en la misma línea?



metodos de instancia c# (5)

Como se dijo antes, la final estática en Java es lo mismo que la lectura estática en C #. De hecho, está diciendo que este miembro es estático y que su contenido no se puede cambiar. También puede especificar en ambos casos el valor del constructor estático.

Pero const en C # es algo completamente diferente. Es más a lo largo de las líneas de las constantes en C (directivas DEFINE ) pero con OOP en mente. Es estático porque es constante: cada instancia tendría esta constante con el mismo valor, ningún constructor puede configurarlo. También es posible que alguien quiera acceder a la constante sin tener que crear una instancia. Cuando lo piensas, la constante no estática simplemente no tiene sentido. Casi se puede decir que las constantes no son parte de un objeto, simplemente lo usan para proporcionar un contexto, un nombre seguro.

Java no tiene un equivalente a const . Puedes leer en algún lugar que la final estática es equivalente a DEFINIR, pero eso es muy vago. Un mecanismo completamente diferente, nada en común, pero en el resultado final el código es el mismo: mejor capacidad de mantenimiento y legibilidad del código.

Solo tienes que dejar de pensar en constantes en C # como miembros estáticos porque no lo son. Piense en ellos como la versión de OOP de DEFINE . Cuando considera que la encapsulación es la única razón para los campos final y de solo lectura es para evitar que su propio código cambie accidentalmente su valor. Y eso no me suena constante.

Sumario:

  • final = readonly
  • estática final = estática de solo lectura
  • N / A = const

¿Por qué C # no permite const y estática en la misma línea? En Java, debe declarar un campo como ''estático'' y ''final'' para que actúe como una constante. ¿Por qué C # no te deja declarar const? S como final?

Hago la distinción adicional de que en Java, cada interfaz es pública y abstracta, ya sea que se declare explícitamente o no. ¿No es efectivamente la naturaleza estática en la naturaleza? ¿Por qué C # se resiste a esto?


Es cierto que una constante C # implica PERO estático , C # tiene una palabra clave final equivalente a Java en la palabra clave readonly .

Entonces, de hecho, C # permite una constante final , es estática de solo lectura en C #.


Las constantes por su naturaleza son estáticas, por lo que sería redundante.


Porque permitir y no requerir modificadores inherentes puede causar confusión. Si tú ves

static const int A = 3 const int B = 5

Puedes creer que son 2 tipos diferentes de constantes.
Incluso VB 2008 (que puede ser muy detallado si lo desea) no lo permite.


Const y static realmente significan cosas diferentes, diferentes mecanismos de almacenamiento, diferentes inicializaciones. estático es de lectura / escritura, por lo tanto, debe tener memoria asignada para el almacenamiento y debe inicializarse en tiempo de ejecución. Una estática se puede inicializar con un valor literal o una expresión. En contraste, una constante es inmutable y se debe inicializar con una constante de tiempo de compilación (generalmente un valor literal o una expresión que se pueda evaluar completamente en el momento de la compilación). El valor se conoce en el momento de la compilación, por lo que se puede incrustar directamente en el código generado, por lo que no requiere que se asigne almacenamiento en tiempo de ejecución.