2009-05-05 29 views
7

¿Los miembros estáticos de una clase de instancia solo viven tanto tiempo como la instancia en sí, o el miembro estático vivirá durante toda la vida de la aplicación?Miembros estáticos de una clase de instancia

Por ejemplo, supongo que tengo una Hashtable como propiedad estática. Si agregué elementos de una "Instancia", ¿estarían disponibles en otra "Instancia"?

Respuesta

16

Viven durante toda la vida útil de AppDomain. (Para las aplicaciones de Windows, suele ser el tiempo de vida del proceso; puede que no sea así, según lo que esté haciendo exactamente. AppDomains se recicla periódicamente en ASP.NET.)

No piense en variables estáticas como se comparte entre instancias: piense que pertenecen al tipo en lugar de a una instancia en particular. Esto facilita la comprensión de cómo funcionan las cosas cuando a veces nunca se crean instancias.

Por ejemplo:

class Test 
{ 
    static int x = 0; 

    static void Main() 
    { 
     x = 10; 
     Console.WriteLine(x); 
    } 
} 

No hay casos en torno a "compartir" Test.x - pero eso está bien, porque está asociado al tipo de Test en lugar de con casos de Test.

Podría argumentar que esta es una distinción bastante sutil, pero es una que he encontrado útil.

+0

Tiendo a pensarlo en términos de "asociado con el tipo _and_ compartido entre todas las instancias". –

+2

@Joel: ¿Pero todavía no da una falsa sensación de que las instancias tienen algo que ver con eso? También podría argumentar que Test.x también se comparte entre todas las instancias de "cadena" :) –

+5

Tiendo a pensar que los miembros estáticos no tienen NADA que ver con instancias que no sean el nombre del tipo y el manejo del modificador de acceso, entonces yo ' Estoy con Jon en lugar de Joel en este caso. –

Cuestiones relacionadas