Answers:
在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
您提供的示例不能真正被视为全局变量。
首先检查您是否真的需要全局变量,而不是公然使用它而不考虑您的软件体系结构。
假设它通过了测试。根据使用情况,Globals可能很难通过种族条件和许多其他“坏事”进行调试,最好从准备处理此类坏事的角度着手进行处理。所以,
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);