为什么要创建多个静态类实例
本文关键字:静态类 实例 创建 为什么 | 更新日期: 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
来获取共享的静态实例