significado - palabras reservadas utilizadas en c#
Palabra clave estática en c# (4)
Estoy realmente confundido con el significado real de la palabra clave estática en C #. He revisado diferentes artículos en Internet, pero ninguno de ellos realmente me está ayudando a entender su significado y otras fuentes no son confiables. Sé que Stack Overflow tiene algunas mentes brillantes que pueden ayudarme a entender el significado real de estática como
- Cuando se inicializan.
- Métodos estáticos, propiedades, clases y constructores.
- Static vs readonly vs constant
De la documentación:
Los inicializadores de variable de campo estático de una clase corresponden a una secuencia de asignaciones que se ejecutan en el orden textual en que aparecen en la declaración de clase.
Los miembros estáticos se inicializan en el primer acceso a la clase y se ejecutan en orden textual.
Métodos Static
, las propiedades son parte de la clase y no de la instancia.
Static
no tiene nada que ver con readonly
o constant
. Static
es una forma como un miembro accedido , readonly
y constant
es como un miembro almacenado / administrado .
En resumen, estática significa efectivamente "asociado con un tipo en lugar de cualquier instancia del tipo". Entonces, hay un conjunto de variables estáticas para un tipo (dentro de un dominio de aplicación) si tiene 0 instancias o un millón; no necesita una instancia para acceder a un miembro estático, etc.
El punto exacto de inicialización de las variables estáticas depende de si también hay un constructor estático o no, pero en términos generales es "una vez, generalmente antes de que ocurra algo significativo en la clase". (Vea esta publicación del blog para una descripción más detallada.)
Si bien los campos de readonly
pueden ser estáticos o de instancia (es decir, relacionados con el tipo o relacionados con una instancia del tipo), los valores const
son siempre estáticamente implícitos (son constantes en tiempo de compilación, por lo que no tendría sentido tener uno) copia por instancia).
A veces puede ver que la static
se describe como "compartida entre todas las instancias de un tipo"; a mí personalmente me disgusta esa descripción, ya que sugiere que tiene que haber al menos una instancia ... mientras que en realidad, no necesita ninguna instancia en Para utilizar un miembro estático. Prefiero pensar en ellos como completamente separados, en lugar de ser "compartidos" entre instancias.
Puedo recomendar este artículo, parece bastante descriptivo: codeproject.com/Articles/15269/Static-Keyword-Demystified
También recomendaría un artículo oficial de la Guía de programación de c # que cubra los diversos usos de la palabra clave estática. Puede ir desde allí ya que hay muchos enlaces a diferentes artículos de MSDN .: Clases estáticas y Miembros de clases estáticas (Guía de programación de C #)
Un poco sobre constante (const) y readonly:
- constant o const es una variable que no se puede modificar, y qué valor se conoce en el momento de la compilación.
- readonly es muy similar a la constante, esto tampoco se puede modificar, la diferencia es que un campo readonly se puede modificar / inicializar una vez en el constructor. Después de eso, leer solo es lo mismo que constante.
Usando ejemplos:
constant:
const int a=10; // value cannot be modified, value is known at compile time
Pero, ¿qué hacer cuando queremos un campo constante cuyo valor no se conoce en el momento de la compilación?
e.g const PersonClass a=new PersonClass("name"); // error
La respuesta es un campo de solo lectura:
readonly:
readonly PersonClass a=new PersonClass("name"); // all correct