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

时间:2015-10-01 03:32:02

标签: c# dll static

假设我有3个DLL' s。 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相同的副本)。所以现在我有两份ImportTimer,我只想让两个DLL共享一份。如何让2个DLL共享同一个静态实例?

1 个答案:

答案 0 :(得分:1)

你的课不是静止的。 static构造函数允许您初始化静态成员it's called automatically before your class is instantiated

通过static class ImportTimer来完成

You can mark you class as static

  

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

但是,这意味着您的班级中除了静态成员之外别无他法。

或者,您可以使用模式确保只创建了1个实例,因为您可以使用Singleton Pattern

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

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

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

    return instance;
}

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