2012-02-23 19 views
37

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 me ayuda a comprender su significado y no confía en otras fuentes. Sé que Stack Overflow tiene algunas mentes brillantes que pueden ayudarme a comprender el significado real de static comopalabra clave estática en C#

  • Cuando se inicializan.
  • estáticas métodos, propiedades, clases y constructores
  • estáticos vs sólo lectura vs constante
+6

http://www.codeproject.com/Articles/15269/Static-Keyword-Demystified – ken2k

+3

¿Es esta una preguntas de la tarea? –

+5

¿Ha leído la documentación de MSDN en ['static'] (http://msdn.microsoft.com/en-us/library/98f28cdx.aspx)? ¿Qué no entiendes? – Oded

Respuesta

68

En resumen, estático significa efectivamente "asociado con un tipo en lugar de una cualquiera de instancia del tipo". Así que 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; que no es necesario una instancia para acceder a un miembro estático, etc.

El exacta punto de inicialización de variables estáticas depende de si también hay un constructor estático o no, pero muy a grandes rasgos se trata de "una sola vez, por lo general antes algo significativo sucede en la clase ". (Ver this blog post para una descripción más detallada.)

Mientras readonly campos pueden ser estáticos o instancia (es decir, relacionada con el tipo o relacionadas con una instancia del tipo), const valores son siempre implícitamente estática (que' volver a las constantes de tiempo de compilación, por lo que no tendría sentido tener una copia por instancia).

A veces se puede ver static que se describe como "compartida entre todas las instancias de un tipo" - Yo personalmente aversión a esa descripción, ya que sugiere que tiene que haber al menos un caso ... cuando en realidad, que Don No es necesario ninguna instancia para utilizar un miembro estático. Prefiero pensar que están completamente separados, en lugar de ser "compartidos" entre instancias.

+6

cuán ordenado y detallado :) mi voto! –

+0

Gracias :) esto me ayudó a entender "estática" – Karthik

+0

Su enlace a la publicación de blog está roto, de acuerdo con esta publicación http://stackoverflow.com/a/665696/1668069 compartir el montón appdominio, ¿es cierto que la clase estática siempre tiene 1 instancia en el montón que comparten en appdomains, ¿es cierto? – Mathematics

6

De la documentación:

campo estático inicializadores de variables de una clase corresponden a una secuencia de tareas que se ejecutan en el orden textual en el que aparecen en la declaración de clase

miembros estáticos se intializeed en el primer acceso a la clase y se ejecutan en orden textual.

Static métodos, las propiedades son partes de la clase y no instancia.

Static no tiene nada que ver con readonly o constant.Static es una forma como un miembro acessed, readonly y constant es la manera como un miembro almacenado/ logrado.

8

Un poco acerca de constante (const) y de sólo lectura:

  • constante o const es variable que no pueden ser modificados, y cuyo valor es conocido en tiempo de compilación.
  • readonly es muy similar a 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, 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 campo constante whos valor no se conoce en tiempo de compilación?

e.g const PersonClass a=new PersonClass("name"); // error 

La respuesta es un campo de sólo lectura:

readonly: 
readonly PersonClass a=new PersonClass("name"); // all correct 
Cuestiones relacionadas