2011-09-05 7 views
1

this example을 필자의 필요에 맞게 수정하려고하는데, 특히 한 줄은 저를 곤경에 빠뜨립니다. chatserver의 ((Action<List<MessageInfo>>)parm)(msgs); 줄은 나에게 전혀 의미가 없습니다. 나는 타입 ((Action<List<MessageInfo>>)parm);으로 타입 변환 (msgs)을 볼 수 있지만, 아무것도하지 않는 것 같습니다. 나는 느낌 나는이 퍼즐의 누락 마지막 조각이 하나 ...예제 코드 행 이해하기

종류의 관련을 가지고

나는, 누군가가 나이을 이해하는 데 도움이 될 수 있기를 바랍니다.

답변

5

그들은 delegate을 캐스팅 한 다음 msgs으로 호출합니다.

이 비트 :

((Action<List<MessageInfo>>)parm); 

대리자를 캐스팅합니다. 그런 다음 msgs을 사용하여 대리인을 호출합니다.

것은 조금 내려 속보 :

Action<List<MessageInfo>> del = ((Action<List<MessageInfo>>)parm); 
del(msgs); 

저자는 한 라인에 그 모두를 축소하기로 결정했습니다.

+0

감사합니다. 오래된 것들이 새로운 방식으로 "속임수"를 쓰는 것은 쉽지 않습니다. – Atheist

3

라인

((Action<List<MessageInfo>>)parm)(msgs) 

는 메소드의 호출에 이어 캐스트의 간단한 캐스트 아니다.

Action<List<MessageInfo>> action = (Action<List<MessageInfo>>)parm; 
action(msgs); 
0

그들이 말하고있는 것은 :

것을 고려 : 기본적으로이 수행

parm 매개 변수로 취하는 Action

입니다 <MessageInfo>

List

이고 Action이 실행 가능하므로 실행하십시오.

매개 변수로 msgs을 전달합니다.