设想
我有一个围绕 Log4Net 的非静态类。这真的很方便,因为它链接到我拥有的另一个应用程序,该应用程序显示在我编写的各种软件中发生的不同进程的日志(让我查看发生错误的位置,批处理失败等)
问题
这一切都很好,但是如果我想记录整个过程,我必须做一系列的事情:

  • 实例化 Logging 对象。
  • 告诉它开始。
  • 日志内容。
  • 告诉它停止。

  • 这意味着,如果一个进程在类之外运行,我必须把传递 Logging 对象弄得一团糟,这很痛苦而且看起来很乱。
    问题
    我怎么能本质上只是以一种所有类都可以全局访问的方式声明对象......并且使它成为静态并不是一个真正的选择,我不认为。
    .....这可能是浪费时间,但我喜欢意见。

    最佳答案

    为什么您认为将“它”设为静态不是一种选择?我怀疑您混淆了静态类和静态变量的概念,后者维护对非静态类的实例的引用。

    public class Foo
    {
        // Instantiate here, or somewhere else
        private static LogWrapper logWrapper = new LogWrapper(...);
        public static LogWrapper LogWrapper { get { return logWrapper; } }
    }
    

    仅仅因为类是非静态的并不意味着你不能拥有一个全局可用的单例实例。通常不是一个好主意,但对于日志记录来说还不错。

    如果您确实遵循单例路线,则可能需要考虑阅读有关implementing a singleton in C#的文章。

    10-07 13:34