这里是C#:任何原因为什么日志字段应该是私有静态的?
private static readonly ILog log = LogManager.GetLogger(typeof (MyClass));
不仅在C#中,但另一种语言我看到了同样的.. 任何想法?
这里是C#:任何原因为什么日志字段应该是私有静态的?
private static readonly ILog log = LogManager.GetLogger(typeof (MyClass));
不仅在C#中,但另一种语言我看到了同样的.. 任何想法?
它是私密的,因为其他类不应该访问MyClass
'日志。因为它不依赖于类实例,所以它是static
。 (并且可以通过static
方法使用)
这样该字段不会被您的子类继承。
拿这个例子:
class BaseFoobar
{
public static readonly ILog log = LogManager.GetLogger(typeof(BaseFoobar));
}
class SpecializedFoobar : BaseFoobar
{
public void Whatever()
{
log.Error("I exploded");
}
}
如果SpecializedFoobar
的Whatever()
功能被称为有史以来共同应对日志将是无效的:
[MyApp.BaseFoobar]: ERROR: I exploded
感谢关于继承问题的完整解释,但对不起,我应该选择Slaks答案,因为他也描述了静态。 – ktutnik 2010-08-31 02:42:11
啊..不错..感谢.. – ktutnik 2010-08-31 02:39:19
如果该字段不是静态的,会有任何性能损失吗?或者它是使它合理正确的问题? – 2010-08-31 02:40:46
@jpartogi:如果'GetLogger'是一个昂贵的调用,或者每个ILog'实例都使用大量内存,那么肯定会。否则,不多。 – SLaks 2010-08-31 02:49:21