C# 为什么日志字段应该是私有静态的?
这里是C#: 不仅在C#语言中,而且在另一种语言中,我也看到了同样的情况。。C# 为什么日志字段应该是私有静态的?,c#,java,actionscript-3,C#,Java,Actionscript 3,这里是C#: 不仅在C#语言中,而且在另一种语言中,我也看到了同样的情况。。 有什么想法吗?它是私有的,因为其他类不应该访问MyClass日志 它是静态的,因为它不依赖于类实例。(这样它就可以被静态方法使用)这样字段就不会被子类继承 举个例子: class BaseFoobar { public static readonly ILog log = LogManager.GetLogger(typeof(BaseFoobar)); } class SpecializedFoobar :
有什么想法吗?它是私有的,因为其他类不应该访问
MyClass
日志
它是静态的,因为它不依赖于类实例。(这样它就可以被
静态方法使用)这样字段就不会被子类继承
举个例子:
class BaseFoobar
{
public static readonly ILog log = LogManager.GetLogger(typeof(BaseFoobar));
}
class SpecializedFoobar : BaseFoobar
{
public void Whatever()
{
log.Error("I exploded");
}
}
如果调用了SpecializedFoobar
的where()
函数,则共同响应日志将无效:
[MyApp.BaseFoobar]:错误:我分解了
如果字段不是静态的,会不会有性能损失?或者这是一个语法正确的问题?@jpartogi:IfGetLogger
是一个昂贵的调用,或者如果每个ILog
实例都使用了大量内存,这是肯定的。否则,就不多了。感谢您对继承问题的完整解释,但很抱歉我应该选择Slaks答案,因为他也描述了静态。
class BaseFoobar
{
public static readonly ILog log = LogManager.GetLogger(typeof(BaseFoobar));
}
class SpecializedFoobar : BaseFoobar
{
public void Whatever()
{
log.Error("I exploded");
}
}