Respostas:
Em C#
você não pode definir variáveis globais verdadeiras (no sentido de que elas não pertencem a nenhuma classe).
Dito isso, a abordagem mais simples que conheço para imitar esse recurso consiste em usar um static class
, da seguinte maneira:
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
}
Você pode então recuperar os valores definidos em qualquer lugar em seu código (desde que faça parte do mesmo namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Para lidar com diferentes namespaces, você pode:
Globals
classe sem incluí-la em um específico namespace
(de forma que seja colocada no namespace do aplicativo global);namespace
.Não existe variável global em C #. Período.
Você pode ter membros estáticos se quiser:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
static
exemplo que você forneceu não pode realmente ser considerado uma var global.
Em primeiro lugar, examine se você realmente precisa de uma variável global, em vez de usá-la descaradamente, sem levar em consideração a arquitetura do software.
Vamos supor que ele passe no teste. Dependendo do uso, Globals pode ser difícil de depurar com condições de corrida e muitas outras "coisas ruins", é melhor abordá-los de um ângulo onde você esteja preparado para lidar com essas coisas ruins. Assim,
static
classe (para capacidade de gerenciamento).O esboço básico para tal classe seria:
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 outras classes (dentro do mesmo namespace)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
Um recurso útil para isso é using static
Como outros já disseram, você deve criar uma classe para seus globais:
public static class Globals {
public const float PI = 3.14;
}
Mas você pode importá-lo assim para não escrever mais o nome da classe na frente de suas propriedades estáticas:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);