사용자 지정 인수가있는 인터페이스에서 이벤트를 지정하려고합니다. 이벤트 인수가 객체가되어야합니다. 가능한 한 많은 코드를 제거하려고했습니다. 현재 다음 오류가 발생했습니다.C# 사용자 지정 인수가있는 이벤트
ArgumentNullException: Argument cannot be null.
Parameter name: obj
LittleObject.IObject.add_ChangeEvent (System.EventHandler`1 value)
(at LittleObject.cs line : [where the comment is])
코드
public class ChangeEventArgs : EventArgs {
public ChangeEventArgs(SomeClass c){ someClass = c;}
public SomeClass someClass;
}
public interface IObject {
void OnChangeEvent(ChangeEventArgs e);
event EventHandler<ChangeEventArgs> ChangeEvent;
}
public class LittleObject : IObject{
public event EventHandler<ChangeEventArgs> ChangeEvent;
public fireEvent(){
OnChangeEvent(new ChangeEventArgs(new SomeClass()));
}
event EventHandler<ChangeEventArgs> IObject.ChangeEvent{
add{ // error here
lock (ChangeEvent) {
ChangeEvent += value;
}
}
remove{
lock (ChangeEvent){
ChangeEvent -= value;
}
}
}
public void OnChangeEvent(ChangeEventArgs e){
if(ChangeEvent != null) {
ChangeEvent(this, e);
}
}
}
public class Main {
IObject currentObject;
void init(){
currentObject = new IObject();
currentObject.ChangeEvent += new EventHandler<ChangeEventArgs>(OnChangeEvent);
}
void doStuff(){
currentObject.fireEvent();
}
public void OnChangeEvent(object sender, ChangeEventArgs e) {
SomeClass someClass = e.someClass;
}
}
코드가 컴파일됩니까? 인터페이스'new IObject();를 인스턴스화하려고합니다. ' – Chandu
더하기 : 잠금 장치가 비싸 - 정말 필요합니까? ChangeEvent를 fireEvent 메소드 내부의 로컬 변수에 할당하여 잠금을 피하는 간단한 방법이 있습니다. –