Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么日志字段应该是私有静态的?_C#_Java_Actionscript 3 - Fatal编程技术网

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 :

这里是C#:

不仅在C#语言中,而且在另一种语言中,我也看到了同样的情况。。
有什么想法吗?

它是私有的,因为其他类不应该访问
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:If
GetLogger
是一个昂贵的调用,或者如果每个
ILog
实例都使用了大量内存,这是肯定的。否则,就不多了。感谢您对继承问题的完整解释,但很抱歉我应该选择Slaks答案,因为他也描述了静态。
class BaseFoobar
{
   public static readonly ILog log = LogManager.GetLogger(typeof(BaseFoobar));
}

class SpecializedFoobar : BaseFoobar
{
   public void Whatever()
   {
      log.Error("I exploded");
   }
}