如何在C#库中创建全局对象

时间:2013-01-13 12:59:12

标签: c# dll initialization globals

  

可能重复:
  Best way to make data (that may change during run-time) accessible to the whole application?

我有一个C#库。

  1. 库可以有全局对象/变量吗?
  2. 在运行主项目时,是否可以从库中自动执行这些对象的初始化方法,还是必须使其成为静态方法并从主项目运行?

3 个答案:

答案 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#可以有静态类,静态成员。但是课外没有变量。

  

在运行主项目时,是否可以从库中自动执行这些对象的初始化方法,还是必须使其成为静态方法并从主项目运行?

您可以初始化内联,也可以在静态构造函数中进行初始化。在首次访问任何静态成员或实例成员之前调用它们。如果未访问静态成员且未创建实例,则可能无法进行初始化。

Interesting article related to static initializers