Respuestas:
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:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
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:
public class Globals
{
private static bool _expired;
public static bool Expired
{
get
{
// Reads are usually simple
return _expired;
}
set
{
// You can add logic here for race conditions,
// or other measurements
_expired = value;
}
}
// Perhaps extend this to have Read-Modify-Write static methods
// for data integrity during concurrency? Situational.
}
Uso de otras clases (dentro del mismo espacio de nombres)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
Una característica útil para esto es using static
Como han dicho otros, debes crear una clase para tus globales:
public static class Globals {
public const float PI = 3.14;
}
Pero puede importarlo así para no escribir más el nombre de la clase delante de sus propiedades estáticas:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);