¿Cómo declaro una variable para que cada clase (* .cs) pueda acceder a su contenido, sin una referencia de instancia?
101
En C#
no puede definir verdaderas variables globales (en el sentido de que no pertenecen a ninguna clase).
Dicho esto, el enfoque más simple que conozco para imitar esta característica consiste en usar a static class
, de la siguiente manera:
public static class Globals
{
public const Int32 BUFFER_SIZE = 512; // Unmodifiable
public static String FILE_NAME = "Output.txt"; // Modifiable
public static readonly String CODE_PREFIX = "US-"; // Unmodifiable
}
Luego puede recuperar los valores definidos en cualquier lugar de su código (siempre que sea parte del mismo namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Para tratar con diferentes espacios de nombres, puede:
Globals
clase sin incluirla en una específica namespace
(para que se coloque en el espacio de nombres de la aplicación global);namespace
.
No existe una variable global en C #. Período.
Puede tener miembros estáticos si lo desea:
fuente
static
ejemplo que proporcionaste no puede realmente considerarse una var global.Primero examine si realmente necesita una variable global en lugar de usarla descaradamente sin tener en cuenta la arquitectura de su software.
Supongamos que pasa la prueba. Dependiendo del uso, los Globals pueden ser difíciles de depurar con las condiciones de la carrera y muchas otras "cosas malas", es mejor abordarlas desde un ángulo en el que estés preparado para manejar cosas tan malas. Entonces,
static
clase (para mayor facilidad de administración).El esquema básico para tal clase sería:
Uso de otras clases (dentro del mismo espacio de nombres)
fuente
Una característica útil para esto es
using static
Como han dicho otros, debes crear una clase para tus globales:
Pero puede importarlo así para no escribir más el nombre de la clase delante de sus propiedades estáticas:
fuente