2014-04-03 1 views
0

C#이 코드 조각을 어떻게 보간하는지 알고 싶습니다. 은 "현실"EV (이 전자) 어떻게 번역에서대리자를 루프 오버

private EventHandlerList events = new EventHandlerList(); 
    private Object myeventObject = new object(); 
    public event EventHandler<EventArgs> myevent 
    { 
     add { events.AddHandler(myeventObject, value); } 
     remove { events.RemoveHandler(myeventObject, value); } 
    } 

:

public delegate void ChangeStateHandler(object sender, EventArgs e); 
    public event ChangeStateHandler ChangeStateEvent = delegate { }; 

    protected void OnChangeState(EventArgs e) { 
     ChangeStateHandler ev = ChangeStateEvent; 

     ev(this, e); // <<<<< that LINE 
    } 

나는 번역 그 부분 알아? 하나의 함수 (EV)는 루프를 생성 할 수있는 방법

ChangeStateHandler ev = ChangeStateEvent; 
foreach (myHandler in ev) { 
    myHandler(this, e); 
} 

하지만, : 뭔가처럼 생각? 어떻게 그런 식으로 구현합니까?

건배

닫기
+1

는 기본적으로 마법이 무엇인가 "묻는있는 [멀티 캐스트 대표 (http://msdn.microsoft.com로 /en-us/library/ms173175.aspx)에 첨부 된 여러 핸들러를 호출 할 수 있습니까? " 편집 : 어떻게 내 자신의 멀티 캐스트 대리인 롤백하거나 비슷한 동작을 모방 할 수 있습니까? –

+0

당신이 무엇을 요구하고 있는지 이해하기가 어렵습니다. 생성 된 CIL이 어떻게 생겼는지 알고 싶다면 decompiler를 사용하십시오. – Tarec

+0

@Chris : 정확히! – Kaiser69

답변

1

- 그 의미와 유사입니다 :

foreach (ChangeStateHandler myHandler in ev.GetInvocationList()) { 
    myHandler(this, e); 
} 
+0

완벽하게! 내 코드에서 "마법"을 구현할 수있는 방법이 있습니까? 내 args를 자동으로 unbox하고 추가 된 객체 목록을 호출하는 함수를 호출 하시겠습니까? – Kaiser69

+0

@ Kaiser69 질문을 이해하지 못합니다. 그건 마법이 아니에요. 쓸모있는 코드입니다. –

+0

ㅎ .. 영어는 제 첫 언어가 아닙니다. 마술은 myHandler()에 상대적으로 >> 투명하게 번역 된 >> foreach (bla bla) << 어떻게 자동 번역을 구현하는 함수를 구현합니까? 뭔가 myFunction (myArgs) 만 호출하고 myFunction {}의 항목을 반복하면됩니까? – Kaiser69

관련 문제