gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:49 24 4
gpt4 key购买 nike

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

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

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

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

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

所以......我知道静态只读只能为类初始化设置一次,并且可以像我们正在做的那样设置,也可以在静态构造函数中设置。但是,如果我们不将其设为只读,为什么它会“丢失”记录器?

最佳答案

将变量转换为属性

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

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

然后在set行放置一个断点

当应用程序中断时,观察调用堆栈

添加更多信息:

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

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

关于c# - 静态只读和静态字段有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37060551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com