2012-10-14 2 views
1

하다면 this blog postWeakEventHandler의 버그는 무엇입니까?

에 WeakEventHandler을 발견하지만 그는 말한다 :

업데이트 : 네,이 깨진 알고있다. 이 작동하지 않는 것을 의미 버그 ...

입니다 및 버그 :(

public class WeakEventHandler<DT, T> where T : EventArgs 
{ 
    private WeakReference weakRefToOriginalDelegate; 
    public WeakEventHandler(EventHandler<T> originalDelegate) 
    { 
     weakRefToOriginalDelegate = new WeakReference(originalDelegate); 
    } 

    private void DoInvoke(object sender, T args) 
    { 
     EventHandler<T> originalDelegate = (EventHandler<T>) weakRefToOriginalDelegate.Target; 
     if (originalDelegate != null) originalDelegate(sender, args); 
    } 

    public static implicit operator DT(WeakEventHandler<DT, T> wd) 
    { 
     object o = Delegate.CreateDelegate(typeof (DT), wd, "DoInvoke"); 
     return (DT) o; 
    } 
} 

사람이 WeakEventHandler 구현에 버그가 무엇인지 설명 할 수 있을까?

답변

2

가 무엇인지 말한다하지 않습니다 제프리 리히터, "C#을 통해 CLR"실제로

당신을 위해 여기를 반복 아무 소용이 없다 C#을 통해 CLR에서 WeakEventHandlerWeakDelegate 구현을 포함하지만 여기에 자신의 수정 된 코드를 볼 수 있습니다 저자 :. http://www.wintellect.com/cs/blogs/jeffreyr/archive/2011/03/17/weak-event-handlers.aspx

책에 표시된 코드가 의도 한대로 작동하지 않으므로 위의 링크는 그의 수정 사항을 가리 킵니다.

+0

약한 이벤트의 구현을 찾고있는 것이 아니라 위에서 보여준 구현의 문제점을 이해하고 싶습니다. C#을 통해 CLR을 확인한 적이 있습니다. 위에서 설명한 것처럼 약한 이벤트 핸들러 구현과 거의 같습니다. Richter는 자신의 블로그에서 의도 한대로 작동하지 않는다고 말합니다. 따라서이 구현의 문제점이 무엇인지 알고 싶습니다. –

+1

첫 번째 버전은 WeakReference를 참조 대리인 자체에 사용하는 차이점을 알지만 "수정 된 버전"은 WeakReference를 대리인의 참조 대상으로 사용합니다. 무슨 뜻이에요? 참조가 위임 할 때 WeakReference가 올바르게 작동하지 않습니까? –

관련 문제