로그를 작성할 클래스가 있습니다. 수업은 (아래에 명시되지 않은 특정 상황에서) 반응하는 학급에 의해 소집 될 이벤트를 제기해야합니다.맞춤 이벤트를 발생시킬 때 오류가 발생했습니다.
개체 참조가 개체
어떤을의 인스턴스로 설정하지 않는 것이, 나는 아래의 코드를 가지고 있지만 최대한 빨리 이벤트를 마련하려고, 나는이 표시된 라인에 오류가 내가 뭘 놓친 거지?
//1. Class where event is registered
public class LogEvent
{
public delegate void WriteLogEventHandler(object Sender, WriteLogEventArgs e);
public event WriteLogEventHandler WriteLog;
public class WriteLogEventArgs : EventArgs
{
public string Message { get; set; }
public WriteLogEventArgs(string message) : base()
{
Message = message;
}
}
//Raise the event.
internal void OnWriteLog(WriteLogEventArgs e)
{
WriteLog(this, e); //Error here. Seems like WriteLog is null
}
//2. Class where event is raised.
public class Logs
{
public static void WriteLog(string message)
{
LogEvent.WriteLogEventArgs args = new LogEvent.WriteLogEventArgs(message);
new LogEvent().OnWriteLog(args);
}
}
//3. Class where event should be consumed
public class MyClass()
{
private LogEvent _logEvent;
public MyClass()
{
//Subscribe to event:
_logEvent = new LogEvent();
_logEvent.WriteLog += (sender, args) => { DoSomething(args.Message); };
}
public void DoSomething(string message)
{ ... }
}
당신이'새로운 LOGEVENT() OnWriteLog (인수) 할 때,. WRITELOG (문자열 메시지)'의를''당신은 WriteLog'이 최대 유선'가 없습니다 LogEvent''의 새 인스턴스를 만들 핸들러는 물론 null입니다. 또한'MyClass' 생성자에서'LogEvent'를 생성하고'WriteLog'를 연결하지만'LogEvent' 인스턴스를 아무 곳이나 저장하지 않습니다. –
의미가 있습니다. 나는 그런 생각을하고 몇 가지 시나리오를 시도했지만 아직 성공하지 못했습니다. 나는 코드 예제를 요구하기에는 너무 어리 석다. 지금 당장 시도 할 것이다. –
당신의 대답 중 2 편이 내 코드에 부분적으로 있지만 질문에는 없다. 질문을 업데이트합니다. 감사. –