静态只读和静态字段有什么区别?

时间:2016-05-05 21:27:08

标签: c# .net

因此,为了给出一些上下文,因为这总是有帮助的,我们正在使用LightInject和Log4Net以及Common.Logging。如果我们将记录器初始化为:

public static ILog Logger = LogManager.GetLogger<someType>();

记录器在第一次实例化类时(通过LightInject)工作,并且在此之后似乎永远不会记录(或者它甚至可能不是第一次记录,有时很难说)。

如果我们将该行更改为此(注意细微差别),它始终有效。

public static readonly ILog Logger = LogManager.GetLogger<someType>();

所以......我得到一个静态readonly只能为类初始化设置一次,并且可以像我们一样或在静态构造函数中设置。但是如果我们不把它变成只读的话,它为什么会“失去”记录器呢?

1 个答案:

答案 0 :(得分:0)

将您的变量转换为属性

private static ILog _logger = LogManager.GetLogger<someType>();

public static ILog Logger {
  get{return _logger;}
  set {_logger=value;}
}

然后将breakpoint放在set

当应用程序中断时,会看到调用堆栈

添加更多信息:

  • 第一次设置时,将_logger变量放在监视窗口中。
  • 然后右键单击它并选择make object id;
  • 这将为您提供#1内存引用
  • 然后将#1添加到您的观察列表中。

如果以后_logger停止引用#1,则表示它已更改!