2012-09-02 3 views
2

나는이 방법이 다음에 응답이 호출 될 때 호출됩니다.메소드 파라미터는

두 가지 질문이 있습니다.

  1. 위임자를 제거하는 코드는 어떻게 작성합니까? 어떻게해야할지 모르겠다.

  2. 위와 같이 위임자의 내부 동작 대부분은 메서드 매개 변수에 의존합니다. 대의원은 어떻게 행동 할 것인가?

미리 감사드립니다.

답변

6

익명 메소드는 제거 할 고통이며, captire-context의 인스턴스는 작성시에만 사용 가능하므로 필수입니다. 다행히, 트릭이있다 :

SomeDelegateType handler = null; 
handler = (myclass master) => 
      { 
       if (master.objs[resargs[0]].status != true) return; 
       master.objs[resargs[0]].request(resargs); 
       pndgcmds.Remove(handler); 
      }; 
pndgcmds.Add(handler); 

이 지금 호출 할 때 자체를 취소하는 자기 구독 취소 핸들러입니다. 이렇게하려면 델리게이트 인스턴스 (handler)를 저장해야하지만 그 변수에 대해 클로저를 만듭니다. 초기 =null은 명확한 할당을 요구합니다.

resargs 변수도 캡처되므로 가입 후, 호출되기 전에 index-zero의 값이 변경되면 혼동 될 수 있습니다. "now"값을 사용하려면 다음을 닫으십시오.

SomeDelegateType handler = null; 
string val = resargs[0]; 
handler = (myclass master) => 
      { 
       if (master.objs[val].status != true) return; 
       master.objs[val].request(resargs); 
       pndgcmds.Remove(handler); 
      }; 
pndgcmds.Add(handler); 
+0

woot ... 일부 복잡한 기계 참으로! 한 가지만 남았습니다. 핸들러에 델리게이트를 할당하기 전에 null을 할당해야하는 이유는 아직 모르겠습니다. 감사! – irisjay

+0

기다려라. 아니, 지금은 이해한다. 정말 고마워! – irisjay

관련 문제