這裏是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