2011-11-05 109 views
0

第一:如果問題不對,我真的不知道如何描述它,因爲我不是編碼專業人員。從另一個班級訪問「班級會話」

所以我在主類寫了這行:

public Log log = new Log("program.log"); 

這將啓動我的記錄器的會話。然後,我使用該會話在我的主類代碼中的任何地方寫入日誌。 但是我正在做另一課的骯髒工作,所以我也想在那裏登錄。我如何從該類訪問相同的「日誌會話」?

寫入MainClassName.log不起作用。

+1

您可以將'log'作爲參數傳遞給其他類的方法嗎? 'obj.doSomething(ref log,[other args]);'(在jonskeet <_ <下無法發佈答案) –

回答

2

不,MainClassName.log不會工作,因爲您的變量是實例變量。這將需要是一個靜態變量...或者你必須有一個MainClassName實例通過它來訪問實例變量。

但是,我個人建議你不要使用公共變量。我建議使用私有變量除了「常量」(其中可以是不可變類型的只讀變量,而不僅僅是.NET認爲常量的東西)之外的所有內容 - 甚至在很多情況下。

我還建議使用類似log4net的東西 - 並且您可能會從每個類使用一個單獨的日誌記錄對象中受益,以便您可以輕鬆地從不同類開啓或關閉日誌(或者使用更加精細嚴格控制嚴重程度)。

+0

現在創建主類的實例是最簡單的解決方案,謝謝您提醒我! – fgblomqvist

2

如果你想自己控制記錄器,你可以實現它作爲一個單身,所以你總是來自世界各地得到相同的情況下在你的應用程序域:http://msdn.microsoft.com/en-us/library/ff650316.aspx

我使用log4net的時候驚訝喬恩斯基特建議Trace已經對TraceSource進行了很好的升級。允許您在app.config/web.config中控制不同的輸出機制,過濾器,來源和詳細程度。

相關問題