我已經做了很多關於實例與靜態類的閱讀,還沒有找到我的問題的答案。在實例類引用的靜態類中實例化不同類時是否存在任何風險?實例類 - >靜態類 - > C#中的實例類
我正在使用的當前設計是在其中實例類調用靜態「記錄器」方法(傳遞一系列參數)以將錯誤記錄到文件系統中的文本文件中。我正在重構靜態「Logger」方法來實例化一個參數類(它只是一系列屬性和一些幫助方法,以XML或字符串的形式返回自身)以及一個DBLogger類,以便將錯誤記錄到數據庫而不是文件系統,傳遞參數類作爲唯一參數。
該模型在我的傳統VB6代碼中運行良好,其中Logger類是實例化的,不是靜態的。
但現在在.NET代碼中我不確定是否應該讓我的2個新類(參數和DBLogger)是靜態的,或者只是讓DBLogger靜態並實例化參數類。我擔心從靜態類創建(或不帶)實例的併發/多線程數據問題的可能性。我有權擔心還是無所謂?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
// all code truncated for illustration purposes
namespace ThisIs.A.Test
{
//INSTANCE
public class ErrorLogParameters
{
private int mThreadId = 0;
private int mErrorNumber = 0;
private string mServerDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
public int ThreadId
{
get { return mThreadId; }
set { mThreadId = value; }
}
public int ErrorNumber
{
get { return mErrorNumber; }
set { mErrorNumber = value; }
}
public string ServerDate
{
get { return mServerDate; }
}
}
//INSTANCE
public class ErrorLog
{
public void LogErrorToDatabase(ErrorLogParameters criteria)
{
//Log error to database here
}
}
//STATIC - Instantiates INSTANCE of ErrorLogParameters and ErrorLog
public class Logger
{
public static void WriteLog(string pstrObjectName, string pstrProcedureName, int plngErrNumber, string pstrErrDescription)
{
// create a new parameter object
ErrorLogParameters objParameters = new ErrorLogParameters();
// populate object properties
objParameters.ErrorNumber = mlngErrNumber;
objParameters.ThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
ErrorLog objErrorLog = new ErrorLog();
objErrorLog.LogErrorToDatabase(objParameters);
}
}
//INSTANCE - Invokes STATIC method
public class SomeInstance
{
private void ErrorHandler_Log(Exception exception, string procedureName, string additonalDescription, string stackTrace)
{
// call from instance class to static class
Logger.WriteLog(mstrObjectName, procedureName, mlngErrNumber, mstrErrDescription);
}
}
}
你說的是單身模式嗎?記錄器通常以單身實現,所以我不認爲你會遇到很多問題。我認爲這個帶有子實例的記錄器的靜態概念很有意義。 – 2013-03-25 18:47:51
如果您添加了代碼以更好地瞭解您正在談論的內容,那將非常有幫助。 – konkked 2013-03-25 19:19:01