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

Ste*_*gas 11 c# dll initialization globals

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

我有一个C#库.

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

Hog*_*gan 19

在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;
     }
}
Run Code Online (Sandbox Code Playgroud)

注意,我也使用静态初始化程序,它保证在使用/调用任何成员或函数之前的某个时刻运行.

在你的程序的其他地方你可以简单地说:

Console.WriteLine(Globals.Name);
Globals.onlineMemeber.Add("Hogan");
Run Code Online (Sandbox Code Playgroud)

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


您可以将静态成员添加到任何类,它们将全局可用,但我认为为全局变量设置一个地方是一个更好的设计.


Erg*_*wun 7

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

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