what programacion method means c# static-methods static-members

programacion - Variables estáticas de C#- alcance y persistencia



variables static c# (9)

Los resultados que esperaba eran 0, 3, 0, 10, 0.

Para mi sorpresa, obtuve 0, 3, 3, 10, 10.

No estoy seguro de por qué esperaría que la variable estática vuelva a su valor original después de cambiarla desde el método Foo (int). Una variable estática conservará su valor durante toda la vida útil del proceso y solo existirá una por clase, no por instancia.

Acabo de hacer un pequeño experimento:

public abstract class MyClass { private static int myInt = 0; public static int Foo() { return myInt; } public static int Foo(int n) { myInt = n; return bar(); } private static int bar() { return myInt; } }

y luego corrí:

MessageBox.Show(MyClass.Foo().ToString()); MessageBox.Show(MyClass.Foo(3).ToString()); MessageBox.Show(MyClass.Foo().ToString()); MessageBox.Show(MyClass.Foo(10).ToString()); MessageBox.Show(MyClass.Foo().ToString());

Los resultados que esperaba eran 0, 3, 0, 10, 0.

Para mi sorpresa, obtuve 0, 3, 3, 10, 10.

¿Cuánto tiempo persisten estos cambios? ¿La duración de la ejecución del programa? ¿La duración de la función llamando al método estático?


Las variables estáticas pertenecen al tipo, no a su instancia. Y generalmente (si no está creando múltiples dominios de aplicaciones) los objetos de tipo se cargan solo una vez y existen durante la vida útil del proceso.



Persiste durante la duración de la ejecución del programa o hasta que se sobrescriba con otro valor. Si desea que el resultado sea el que quiere que sea, debe especificar myInt = 0 en el constructor antes de devolver myInt;


Persistirán durante la duración de AppDomain . Los cambios realizados en la variable estática son visibles a través de los métodos.

MSDN:

Si se declara una variable local con la palabra clave estática, su tiempo de vida es más largo que el tiempo de ejecución del procedimiento en el que se declara. Si el procedimiento está dentro de un módulo, la variable estática sobrevive mientras su aplicación continúe ejecutándose.

Vea a continuación para más detalles:


Por la duración de la ejecución del programa.

Las variables de clase estática son como globales. No están conectados a objetos específicos de una clase, solo hay una instancia de esos por programa. Las únicas variables que viven durante el tiempo de ejecución de la función son las variables automáticas (locales) de la función.


Según la especificación de C #, una variable estática se inicializará a más tardar la primera vez que se cargue una clase en un dominio de aplicación, y existirá hasta que se descargue ese dominio de aplicación, generalmente cuando el programa termina.


Si es una variable estática, eso significa que existe exactamente un lugar en la memoria durante la duración del programa.


Sus cambios en el ámbito estático vivirán mientras su aplicación