15

可能重复:
使整个应用程序可以访问数据(可能在运行时更改)的最佳方法?

我有一个 C# 库。

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

3 回答 3

26

在 C# 中,我总是使用静态类来提供此功能。此处详细介绍了静态类,但简要地说,它们仅包含静态成员且未实例化——本质上它们是通过类名(和命名空间)访问的全局函数和变量。

这是一个简单的例子:

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");

静态对象只“创建”一次。因此,您的应用程序使用该对象的任何地方都将来自同一位置。根据定义,它们是全球性的。要在多个地方使用此对象,只需引用对象名称和要访问的元素。


您可以将静态成员添加到任何类,它们将在全球范围内可用,但我认为为全局变量设置一个位置是一种更好的设计。

于 2013-01-13T13:06:35.660 回答
7

您可以将类上的公共静态属性用作全局对象/变量。

您可以在类的静态构造函数中初始化静态属性,该构造函数将在第一次访问属性之前直接调用。

于 2013-01-13T13:00:39.803 回答
4

库可以有全局对象/变量吗?

是的,c# 可以有静态类、静态成员。但是在类之外不能存在任何变量。

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

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

与静态初始化器相关的有趣文章

于 2013-01-13T13:03:43.350 回答