C# - 全局程序对象

Goo*_*ber 4 c# oop static

脚本

我有一个包含Log4Net的非静态类.这非常方便,因为它链接到我所拥有的另一个应用程序,它显示我编写的各种软件中出现的不同进程的日志(允许我查看错误发生的位置,批处理失败等)

问题

这一切都很好,但如果我想记录整个过程,我必须做一系列的事情:

  1. 实例化Logging对象.
  2. 告诉它开始.
  3. 记录东西.
  4. 告诉它停止.

这意味着如果一个进程在类之外运行,我必须搞乱传递Logging对象,这对于一个痛苦而且看起来很混乱.

我怎么能基本上以这样的方式声明对象:所有类都可以全局访问......并且使它静态不是真正的选择,我不这么认为.

.....这可能是浪费时间,但我喜欢意见.

Jon*_*eet 6

你为什么认为让"它"静止不是一种选择?我怀疑你是混淆静态和静态变量的想法,静态变量维护对非静态类的实例的引用.

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

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

如果你确实沿着单一路线走下去,你可能会考虑阅读我在C#中实现单例的文章.


SLa*_*aks 5

听起来你想要一个单身人士.

您可以创建一个返回类的单个实例的静态属性.