我相信第一个代码示例是一个简单的Singleton实现,我不确定它是否是线程安全的。作为类,EventSourceLogger派生自EventSource,它不是静态的,这个类本身不能只是一个静态类(这本来更方便 - 尽管在单一和静态之间进行权衡)。
为了简洁起见,我从一个更彻底的特定已知线程安全实现恢复到此实现 - 在同事代码中喜欢这种方法的外观之后。我丢了什么?
当前实施
[EventSource(Name = "EventSourceLogger")]
public class EventSourceLogger : EventSource
{
public static readonly EventSourceLogger Logger = new EventSourceLogger();`
}
以前的实施
[EventSource(Name = "EventSourceLogger")]
public class EventSourceLogger : EventSource
{
private static EventSourceLogger instance;
private EventSourceLogger()
{
}
public static EventSourceLogger Instance
{
get
{
if (instance == null)
{
instance = new EventSourceLogger();
}
return instance;
}
}
}