정적 클래스와 정적 클래스에서 많은 내용을 읽었으며 내 질문에 대한 답을 찾지 못했습니다. 인스턴스 클래스에 의해 참조 된 정적 클래스에 다른 클래스를 인스턴스화하는 데 어떤 위험이 있습니까?C#의 인스턴스 클래스 -> 정적 클래스 -> 인스턴스 클래스
현재 작업중인 클래스는 인스턴스 클래스가 파일 시스템의 텍스트 파일에 오류를 기록하기 위해 일련의 매개 변수를 전달하는 정적 "로거"메서드를 호출하는 디자인입니다. 나는 정적 인 "Logger"메소드를 리팩터링하여 매개 변수 클래스 (일련의 속성 및 XML 또는 문자열 자체를 반환하는 몇 가지 도우미 메소드)와 DBLogger 클래스를 인스턴스화하여 데이터베이스에 오류를 기록하지 않고 파일 시스템에서 매개 변수 클래스를 유일한 매개 변수로 전달합니다.
이 모델은 정적이 아닌 Logger 클래스가 인스턴스화 된 내 기존 VB6 코드에서 잘 작동합니다.
하지만 이제 .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);
}
}
}
당신은 싱글 톤 패턴에 대해 이야기하고 있습니까? 로거는 싱글 톤으로 구현되는 경우가 많으므로 실제로 많은 문제가 발생할 것이라고 생각하지는 않습니다. 나는이 자식 인스턴스를 가진 로거의 정적 개념이 많은 의미를 갖게한다고 생각한다. –
당신이 말하는 내용을 더 잘 이해할 수 있도록 코드를 추가하면 정말 도움이 될 것입니다. – konkked