可能重复:
Best way to make data (that may change during run-time) accessible to the whole application?
我有一个C#库。
答案 0 :(得分:19)
在C#中,我总是使用静态类来提供此功能。静态类详见here,但简单地说它们只包含静态成员而没有实例化 - 实质上它们是全局函数和通过类名(和名称空间)访问的变量。
这是一个简单的例子:
public static class Globals
{
public static string Name { get; set; }
public static int aNumber {get; set; }
public static List<string> onlineMembers = new List<string>();
static Globals()
{
Name = "starting name";
aNumber = 5;
}
}
注意,我也使用静态初始化程序,保证在使用/调用任何成员或函数之前的某个时刻运行。
在您的计划的其他地方,您可以简单地说:
Console.WriteLine(Globals.Name);
Globals.onlineMemeber.Add("Hogan");
静态对象仅“创建”一次。因此,您的应用程序使用对象的任何地方都将来自同一位置。根据定义,它们是全球的。要在多个位置使用此对象,只需引用对象名称和要访问的元素。
您可以将静态成员添加到任何类中,它们将全局可用,但我认为为全局变量设置一个位置是更好的设计。
答案 1 :(得分:7)
您可以在类上使用公共static properties作为全局对象/变量。
您可以在类的static constructor中初始化静态属性,这将在第一次访问属性之前直接调用。
答案 2 :(得分:4)
库可以有全局对象/变量吗?
是的,c#可以有静态类,静态成员。但是课外没有变量。
在运行主项目时,是否可以从库中自动执行这些对象的初始化方法,还是必须使其成为静态方法并从主项目运行?
您可以初始化内联,也可以在静态构造函数中进行初始化。在首次访问任何静态成员或实例成员之前调用它们。如果未访问静态成员且未创建实例,则可能无法进行初始化。