usar programacion metodos metodo method estaticos cuando c# static static-variables

c# - metodos - static programacion



¿Cuál es el uso de la variable estática en C#? Cuándo usarlo? ¿Por qué no puedo declarar la variable estática dentro del método? (10)

He buscado sobre variables estáticas en C #, pero todavía no entiendo cuál es su uso. Además, si trato de declarar la variable dentro del método, no me dará el permiso para hacerlo. ¿Por qué?

He visto algunos ejemplos sobre la variable estática. He visto que no necesitamos crear una instancia de la clase para acceder a la variable, pero eso no es suficiente para entender su uso y cuándo usarlo.

Segunda cosa

class Book { public static int myInt = 0; } public class Exercise { static void Main() { Book book = new Book(); Console.WriteLine(book.myInt); // Shows error why does it show me error? // Can''t I access the static variable // by making the instance of a class? Console.ReadKey(); } }


Algunos ejemplos del "mundo real" para variables estáticas:

construyendo una clase donde puede alcanzar valores codificados para su aplicación. Similar a una enumeración, pero con más flexibilidad en el tipo de datos.

public static class Enemies { public readonly static Guid Orc = new Guid("{937C145C-D432-4DE2-A08D-6AC6E7F2732C}"); }

El singleton ampliamente conocido, esto permite controlar tener exactamente una instancia de una clase. Esto es muy útil si quieres acceder a él en toda tu aplicación, pero no lo pasas a todas las clases solo para permitir que esta clase lo use.

public sealed class TextureManager { private TextureManager() {} public string LoadTexture(string aPath); private static TextureManager sInstance = new TextureManager(); public static TextureManager Instance { get { return sInstance; } } }

y así es como llamarías al administrador de texturas

TextureManager.Instance.LoadTexture("myImage.png");

Acerca de su última pregunta: se refiere al error de compilación CS0176 . Traté de encontrar más información al respecto, pero solo pude encontrar lo que el msdn tenía que decir al respecto:

Un método, campo, propiedad o evento estático se puede llamar en una clase incluso cuando no se ha creado ninguna instancia de la clase. Si se crean instancias de la clase, no se pueden usar para acceder al miembro estático. Solo existe una copia de campos y eventos estáticos, y los métodos y propiedades estáticos solo pueden acceder a campos estáticos y eventos estáticos.


C # no tiene variables estáticas en absoluto. Puede declarar un campo estático en la definición de tipo particular a través de C #. El campo estático es un estado compartido con todas las instancias de tipo particular. Por lo tanto, el alcance del campo estático es de tipo completo. Es por eso que no puede declarar el campo estático dentro de un método; el método es un alcance en sí mismo, y los elementos declarados en un método deben ser inaccesibles sobre el borde del método.


En comparación con las variables de sesión, las variables estáticas tendrán el mismo valor para todos los usuarios considerando que estoy usando una aplicación que se implementa en el servidor. Si dos usuarios acceden a la misma página de una aplicación, la variable estática mantendrá el último valor y se les proporcionará el mismo valor a ambos usuarios, a diferencia de las variables de sesión que son diferentes para cada usuario. Por lo tanto, si desea algo común y lo mismo para todos los usuarios, incluidos los valores que se supone deben usarse junto con el código de la aplicación, solo use estáticos.


En respuesta al "cuándo usarlo" pregunta:

A menudo uso una variable estática (clase) para asignar una ID de instancia única a cada instancia de una clase. Uso el mismo código en todas las clases, es muy simple:

//Instance ID ---------------------------------------- // Class variable holding the last assigned IID private static int xID = 0; // Lock to make threadsafe (can omit if single-threaded) private static object xIDLock = new object(); // Private class method to return the next unique IID // - accessible only to instances of the class private static int NextIID() { lock (xIDLock) { return ++xID; } } // Public class method to report the last IID used // (i.e. the number of instances created) public static int LastIID() { return xID; } // Instance readonly property containing the unique instance ID public readonly int IID = NextIID(); //-----------------------------------------------------

Esto ilustra un par de puntos sobre variables y métodos estáticos:

  1. Las variables estáticas y los métodos están asociados a la clase, no a ninguna instancia específica de la clase.
  2. Se puede invocar un método estático en el constructor de una instancia; en este caso, el método estático NextIID se usa para inicializar la propiedad de solo lectura IID, que es la ID única para esta instancia.

Encuentro esto útil porque desarrollo aplicaciones en las que se utilizan enjambres de objetos y es bueno poder rastrear cuántos se han creado y rastrear / consultar instancias individuales.

También uso variables de clase para rastrear cosas como totales y promedios de las propiedades de las instancias que se pueden reportar en tiempo real. Creo que la clase es un buen lugar para mantener información resumida sobre todas las instancias de la clase.


Intente llamarlo directamente con el nombre de clase Book.myInt


La variable estática conserva su valor anterior hasta que el programa sale. Static se usa llamando directamente a class_Name.Method () o class_Name.Property. No se necesita referencia de objeto. El uso más popular de estática es la clase de Matemáticas de C #. Math.Sin (), Math.Cos (), Math.Sqrt ().


Las clases estáticas no requieren la creación de un objeto de esa clase / creación de instancias, puede prefijar la palabra clave C # static delante del nombre de la clase, para que sea estática.

Recuerde: no estamos instanciando la clase de la consola, la clase String, la clase Array.

class Book { public static int myInt = 0; } public class Exercise { static void Main() { Book book = new Book(); //Use the class name directly to call the property myInt, //don''t use the object to access the value of property myInt Console.WriteLine(Book.myInt); Console.ReadKey(); } }


Los miembros de datos y miembros de funciones que operan en la instancia del tipo se llaman miembros de instancia. El método ToString de int (por ejemplo) son ejemplos de miembros de instancia. Por defecto, los miembros son miembros de instancia. Los miembros de datos y los miembros de funciones que no operan en la instancia del tipo, sino en el tipo en sí mismo, deben marcarse como estáticos. Los métodos Test.Main y Console.WriteLine son métodos estáticos. La clase Console es en realidad una clase estática, lo que significa que todos sus miembros son estáticos. En realidad, nunca crea instancias de una consola: una consola se comparte en toda la aplicación.


Una variable static comparte el valor de la misma entre todas las instancias de la clase.

Ejemplo sin declararlo estático:

public class Variable { public int i = 5; public void test() { i = i + 5; Console.WriteLine(i); } } public class Exercise { static void Main() { Variable var = new Variable(); var.test(); Variable var1 = new Variable(); var1.test(); Console.ReadKey(); } }

Explicación: si observa el ejemplo anterior, simplemente declaro la variable int . Cuando ejecuto este código, la salida será 10 y 10 . Es sencillo.

Ahora veamos la variable estática aquí; Estoy declarando la variable como static .

Ejemplo con variable estática:

public class Variable { public static int i = 5; public void test() { i = i + 5; Console.WriteLine(i); } } public class Exercise { static void Main() { Variable var = new Variable(); var.test(); Variable var1 = new Variable(); var1.test(); Console.ReadKey(); } }

Ahora cuando ejecuto el código, la salida será 10 y 15 . Entonces, el valor de la variable estática se comparte entre todas las instancias de esa clase.


las variables estáticas se usan cuando solo se requiere una copia de la variable. entonces, si declaras una variable dentro del método, no hay uso de tal variable, se vuelve local para funcionar solo.

ejemplo de estática es

class myclass { public static int a = 0; }

Las variables declaradas estáticas se comparten comúnmente en todas las instancias de una clase.

Las variables declaradas estáticas se comparten comúnmente en todas las instancias de una clase. Cuando crea varias instancias de la clase VariableTest Esta variable permanente se comparte en todos ellos. Por lo tanto, en cualquier punto dado del tiempo, solo habrá un valor de cadena contenido en la variable permanente.

Como solo hay una copia de la variable disponible para todas las instancias, el código this.permament dará como resultado errores de compilación porque se puede recordar que this.variablename se refiere al nombre de la variable de instancia. Por lo tanto, se debe acceder directamente a las variables estáticas, como se indica en el código.