为什么要创建多个静态类实例

本文关键字:静态类 实例 创建 为什么 | 更新日期: 2023-09-27 18:15:37

假设我有3个DLL。DLL #1和#2依赖于DLL #3。DLL #3包含一个静态类,如:

public class ImportTimer
{
    public static bool EnableProcessorTimerLogging { get; set; }
    public static bool EnableTimerLogging { get; set; }
    public static DateTime SourceDataDetectionTimestamp { get; set; }
    public static DateTime LastEndProcessTimestamp { get; set; }
    static ImportTimer()
    {
        EnableProcessorTimerLogging = false;
        EnableTimerLogging = false;
        SourceDataDetectionTimestamp = DateTime.Now;
        LastEndProcessTimestamp = DateTime.Now;
    }
    ...
}

所有方法都是静态的。DLL #1和#2彼此不知道(不依赖于对方)。当我从DLL #1调用任何方法,然后在DLL #2上调用相同的方法时,我看到在DLL #2中创建了静态对象的新副本(它不使用与DLL #1相同的副本)。所以现在我有2个ImportTimer的副本,当我只想要一个为两个DLL的共享。我怎样才能得到2 DLL的共享相同的静态实例?

为什么要创建多个静态类实例

你的类不是静态的。static构造函数允许您初始化静态成员,它在类实例化之前被自动调用。

你也可以把你的班级标记为static,通过做static class ImportTimer

静态类在应用程序域的生命周期内保持在内存中您的程序驻留。

但是,这意味着在类中只能有静态成员。

或者,您可以使用模式来确保只创建了一个实例,为此您可以使用Singleton模式。

ImportTimer中,您希望将构造函数设置为private。为什么?因为那样的话,除了类之外没有其他人可以创建实例。

添加静态属性以获取类的实例:

private static ImportTimer instance;
public static ImportTimer Instance 
{
    if(instance == null) instance = new ImportTimer();
    return instance;
}

然后在DLL #1和#2中,您可以使用ImportTimer.Instance来获取共享的静态实例