La palabra clave 'static' ya ha aparecido varias veces en los ejemplos expuestos hasta ahora. Anteriormente estudiamos que haciendo uso de la palabra clave 'static' hacemos referencia a un miembro u objeto del cual no puede haber más de una copia durante la ejecución del programa; es por ello que el método 'Main', el método principal y de entrada de la aplicación, es declarado 'static'.
En ocasiones es necesario disponer de una variable global públicamente accesible que no sea miembro de un objeto, pero sí de una clase. Otras veces será necesario disponer de un método que no necesite ser invocado para un objeto en particular. Fíjate bien en la manera de invocar al método 'WriteLine' de la clase 'Console', que ya hemos utilizado en numerosos ejemplos:
¿Es necesario crear un objeto de la clase 'Console' para poder acceder a su método 'WriteLine'? La respuesta es no, porque es un método declarado como 'static'. De no serlo, deberíamos invocar el método de la siguiente manera:
Pero nunca verás nada parecido, pues el compilador mostrará un error puesto que no es posible crear un objeto a partir de un miembro estático.
Un atributo 'static' puede ser declarado con los modificadores de acceso 'private', 'protected', 'public' e 'internal', pero no puede ser declarado como constante ni como atributo de sólo lectura. Veremos las constantes y los campos de sólo lectura más adelante.
Resumiendo: un miembro 'static', bien un atributo o un método, sólo puede tener una copia en la ejecución del programa; no se pueden hacer objetos de él; y la invocación a un miembro 'static' dependerá del modificador de acceso que acompañe en su declaración.