如何确保静态类中的数据生成,并且只生成一次

本文关键字:一次 数据 何确保 确保 静态类 | 更新日期: 2023-09-27 18:21:04

我有一个带有静态列表属性的静态类。我只想生成列表的内容一次,然后就可以使用它。当然,我还想确保数据是实际创建的,这样当对象使用该类时,它的列表中就有数据。我该如何做到这一点?

public static class MyClass
{
    public static List<int> MyList = new List<int>();
    public MyClass()
    {
        for (int i = 0; i < 10; i++)
        {
            MyList.Add(i);
        }
    }
}

如何确保静态类中的数据生成,并且只生成一次

  • 我只想生成一次列表的内容
  • 我还想确保数据是实际创建的

当您将构造函数更改为静态构造函数时,您当前的代码确保了这一点:

  static MyClass() { }  // not public or private

类加载器将在执行该类的任何其他成员之前执行MyList的初始化。第一次使用类时会发生这种情况。

可观察的行为是静态成员在应用程序开始时被初始化(一次)。

只有当您构建静态初始化程序相互依赖的东西时,您才可能需要思考/担心。

您应该为此使用静态构造函数,如下所示:

static MyClass()
{
    for (int i = 0; i < 10; i++)
    {
        MyList.Add(i);
    }
}

请注意,静态构造函数不需要也不接受任何范围修饰符,如public等。

您可以使用列表的访问器方法以及bool变量来跟踪您的列表是否初始化并填充了数据。

类似于:

private static List<int> myList;
private static void doInitializeList() {
    myList = new List<int>();
    // fill list here
}
public static List<int> getMyList() {
    if (!_myListInitialized) {
       doInitializeList();
    }
    return myList;
}