Відповіді:
У C#
ви не можете визначити істинні глобальні змінні (в тому сенсі , що вони не належать ні до одного класу).
Це було сказано, що найпростіший підхід, який я знаю, щоб імітувати цю особливість, полягає у використанні static class
наступного:
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
}
Потім ви можете отримати визначені значення в будь-якому місці вашого коду (за умови, що це частина того самого namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Щоб мати справу з різними просторами імен, ви можете:
Globals
клас, не включаючи його до конкретного namespace
(щоб він був розміщений у глобальному просторі імен додатків);namespace
.У C # немає такої речі, як глобальна змінна. Період.
Ви можете мати статичних членів, якщо хочете:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
static
приклад, який ви подали, насправді не можна вважати глобальним варом.
Спершу вивчіть, чи дійсно вам потрібна глобальна змінна, а не використовуйте її нахабно, не враховуючи архітектури вашої програми.
Припустимо, що вона проходить тест. Залежно від використання, Глобалам може бути важко налагодити умови перегонів та багато інших "поганих речей", найкраще підходити до них з тієї точки зору, де ви готові боротися з такими поганими речами. Так,
static
клас (для керованості).Основним контуром для такого класу було б:
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.
}
Використання з інших класів (у тому ж просторі імен)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
Корисна функція для цього є using static
Як говорили інші, вам потрібно створити клас для своїх глобальних:
public static class Globals {
public const float PI = 3.14;
}
Але ви можете імпортувати його так, щоб більше не писати ім’я класу перед його статичними властивостями:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);