당신은 실제로 당신이 제거하는 것을 모르는 DLR이 표시되지 않을 경우 제거 : 난 그냥 작동하는 간단한 뭔가를 게시합니다 정적 이벤트 속성을 사용하는 경우 +=
및 -=
을 수행 할 때 동적으로 다음과 같은 작업을 수행합니다.
//d.MyEvent += new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is null
temp += new EventHandler(this.MyHandler) //temp is now MyHandler
d.MyEvent = temp; //set it back
//d.MyEvent -= new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is MyHandler
temp -= new EventHandler(this.MyHandler) //temp is now null
d.MyEvent = temp; //set it back
이벤트 핸들러는 단지 당신이 왼쪽 아무것도 없기 때문에, 마지막에 설정된 속성이 null을해야 제거 할 이벤트 핸들러를했다 그래서 만약 당신이, 모음처럼 생각해야 있도록 MulticastDelegate이다. 믹스에서 더 많은 이벤트가 추가되면 더 명확 해집니다.
//d.MyEvent += new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is null
temp += new EventHandler(this.MyHandler) //temp is now MyHandler
d.MyEvent = temp; //set it back
//d.MyEvent += new EventHandler(this.MyHandler2);
var temp = d.MyEvent; //temp is MyHandler
temp += new EventHandler(this.MyHandler2) //temp is now MyHandler,MyHandler2
d.MyEvent = temp; //set it back
//d.MyEvent -= new EventHandler(this.MyHandler);
var temp = d.MyEvent; //temp is MyHandler,MyHandler2
temp -= new EventHandler(this.MyHandler) //temp is now MyHandler2
d.MyEvent = temp; //set it back
당신이 당신의 행동을 포장하고 당신이 당신의 TryGet에 반환 확인 다르게 저장하고 추가를 필요로하고 스토리지 클래스을 제거해야하는 경우
.
public DelegateStoreage<T>{
public void Add(T del){
//Do your stuff
}
public void Remove(T del){
//Do your stuff
}
public static T operator +(DelegateStoreage<T> x, T y)
{
x.Add(y)
return x
}
public static T operator -(DelegateStoreage<T> x, T y)
{
x.Remove(y)
return y;
}
}
아니, 그 차이는 없습니다. 값은 여전히 null입니다. – fettsnoken
오, 예 - 죄송합니다. 예를 들어 생성 된 코드에서 패턴을 많이 보았습니다. WCF에서. – Rup