He buscado sobre variables estáticas en C #, pero todavía no entiendo cuál es su uso. Además, si intento declarar la variable dentro del método, no me dará permiso para hacerlo. ¿Por qué?
He visto algunos ejemplos sobre las variables estáticas. He visto que no necesitamos crear una instancia de la clase para acceder a la variable, pero eso no es suficiente para entender cuál es 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();
}
}
c#
static
static-variables
Kartik Patel
fuente
fuente
Book
) no a través de una instancia (book
), por lo que la solución más fácil esBook.myInt
.Respuestas:
Una
static
variable comparte su valor entre todas las instancias de la clase.Ejemplo sin declararlo estático:
Explicación: si miras el ejemplo anterior, simplemente declaro la
int
variable. Cuando ejecuto este código, la salida será10
y10
. Es sencillo.Ahora veamos la variable estática aquí; Declaro la variable como
static
.Ejemplo con variable estática:
Ahora, cuando ejecuto el código anterior, la salida será
10
y15
. Entonces, el valor de la variable estática se comparte entre todas las instancias de esa clase.fuente
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 un tipo particular. Por tanto, el alcance del campo estático es de tipo completo. Es por eso que no puede declarar un campo estático dentro de un método: el método es un ámbito en sí mismo, y los elementos declarados en un método deben ser inaccesibles sobre el borde del método.
fuente
Las variables estáticas se utilizan cuando solo se requiere una copia de la variable. por lo que si declara una variable dentro del método, no hay uso de dicha variable, se vuelve local para funcionar solo.
ejemplo de estática es
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 entre todas ellas. Por lo tanto, en cualquier momento dado, solo habrá un valor de cadena contenido en la variable permanente.
Dado que solo hay una copia de la variable disponible para todas las instancias, el código this.permament dará lugar a 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.
fuente
Algunos ejemplos del "mundo real" para variables estáticas:
crear una clase en la que pueda alcanzar valores codificados para su aplicación. Similar a una enumeración, pero con más flexibilidad en el tipo de datos.
El singleton ampliamente conocido, esto permite controlar tener exactamente una instancia de una clase. Esto es muy útil si desea acceder a él en toda su aplicación, pero no pasarlo a todas las clases solo para permitir que esta clase lo use.
y así es como llamarías al administrador de texturas
Acerca de su última pregunta: se refiere al error del compilador CS0176 . Traté de encontrar más información sobre eso, pero solo pude encontrar lo que el msdn tenía que decir al respecto:
fuente
Las variables estáticas se utilizan cuando solo se requiere una copia. Déjame explicarte esto con un ejemplo:
Ahora aquí hemos creado 2 instancias para nuestro
class
círculo, es decir, se crean 2 conjuntos de copias de_PI
junto con otras variables. Entonces, digamos que si tenemos muchas instancias de esta clase_PI
, se crearán múltiples copias ocupando memoria. Entonces, en tales casos, es mejor hacer que tales variables sean similares_PI
static
y operar sobre ellas.Ahora, no importa cuántas instancias se hagan para el
class
círculo, solo existe una copia de la variable que_PI
guarda nuestra memoria.fuente
Las clases estáticas no requieren que cree un objeto de esa clase / instanciarlas, puede prefijar la palabra clave C # estática delante del nombre de la clase, para hacerlo estático.
Recuerde: no estamos creando una instancia de la clase Console, la clase String, la clase Array.
fuente
A partir de este ejemplo de @Kartik Patel, he cambiado un poco, tal vez ahora sea más claro acerca de la variable estática
Variable de clase VS variable de instancia en C #
Miembros de clase estática C # OR variable de clase
}
https://en.wikipedia.org/wiki/Class_variable
https://en.wikipedia.org/wiki/Instance_variable
https://en.wikipedia.org/wiki/Static_variable
https://javaconceptoftheday.com/class-variables-and-instance-variables-in-java/?fbclid=IwAR1_dtpHzg3bC5WlGQGdgewaTvuOI6cwVeFUtTV8IZuGTj1qH5PmKGwX0yM
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
Los miembros de datos y los miembros de función que operan en la instancia del tipo se denominan miembros de instancia. El método ToString de int (por ejemplo) son ejemplos de miembros de instancia. De forma predeterminada, los miembros son miembros de instancia. Los miembros de datos y los miembros de función que no operan en la instancia del tipo, sino en el tipo en sí, 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.
fuente
En respuesta al "¿cuándo usarlo?" pregunta:
A menudo uso una variable estática (clase) para asignar un ID de instancia único a cada instancia de una clase. Utilizo el mismo código en todas las clases, es muy simple:
Esto ilustra un par de puntos sobre las variables y métodos estáticos:
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 utilizo variables de clase para rastrear cosas como totales y promedios de propiedades de las instancias que se pueden informar en tiempo real. Creo que la clase es un buen lugar para guardar información resumida sobre todas las instancias de la clase.
fuente
Intente llamarlo directamente con el nombre de la clase
Book.myInt
fuente
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 implementada en el servidor. Si dos usuarios acceden a la misma página de una aplicación, entonces la variable estática tendrá el último valor y se 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 e igual para todos los usuarios, incluidos los valores que se supone que deben usarse en el código de la aplicación, use solo static.
fuente
No necesitas crear una instancia de un objeto, porque vas a usar una variable estática: Console.WriteLine (Book.myInt);
fuente
La variable estática conserva su valor anterior hasta la salida del programa. Static se usa llamando directamente class_Name.Method () o class_Name.Property. No se necesita ninguna referencia de objeto. El uso más popular de static es la clase Math de C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
fuente