假设我有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共享同一个静态实例?
答案 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
来获取共享的静态实例。