2011-07-28 18 views
2

나는 C#에 능숙하지만 대리인에 대한 내 머리를 얻을 수 없다.대리인 주위에 내 머리가 들기 C#

여러 시나리오가 있고 해당 시나리오에 따라 다른 방법을 대리인에게 첨부 할 수 있다면 유용 할 것입니다.하지만 그 시나리오를 사용할 때를 이해할 수있는 유일한 시간입니다. 왜 함수를 사용하지 않습니까?

MouseClick과 같은 이벤트에 대해 의미가 있습니다. MouseClick이 시작될 때까지 기다린 다음 MouseClick()으로 이동하지만 코드에서이를 이해하지 못합니다. 내가 자바 스크립트에 대한 함수 내에서 함수를 이해하고, 나는 C#에서 그렇게하는 프로그래밍 방식을 찾지 못한다. 그래서 위임 방법은 무엇입니까?

나는 이것에 관해 오늘 약 3 개의 블로그를 읽었고, 누군가가 듣기를 원하면 대의원이 100 % 필요하고 다른 것은 할 수 없다는 것을 알기를 바란다.

답변

4

왜 함수를 사용하지 않는가?

기본적으로 대리인의 역할입니다. 원하는 경우 단일 메소드 인터페이스로 생각할 수 있습니다. 대리자 인스턴스 을 기존 메서드 (메서드 그룹 변환 사용)에서 만들거나 익명 함수 (람다 식 또는 익명 메서드)를 사용할 수 있습니다. 바라건대 그 중 적어도 하나는 내가 가장 가까운 "함수 내 의심 (... 당신을 도울 것입니다

:

전 대표에 기사의 몇 가지있다 함수 "는 등식입니다.

+0

+1 멋진 링크! –

1

당신이보고있는 몇 가지 예제에서 왜 사람들이 왜 직선 함수를 통해 델리게이트를 사용하는지 혼란 스러울 수 있습니다. 이 간단한 경우에는 기본 방법을 사용하여 쉽게 얻을 수 있지만 대리인은 LINQ에서 정말 빛을 발합니다. 대리자는 LINQ에서 복잡한 쿼리를 허용하면서도 비교적 쉽게 작성할 수 있습니다.

-2

위임자 대신 함수를 사용할 수 있지만 위임자는 m 귀하의 코드를 깨끗하고 읽기 쉽도록 만드십시오 (예를 들어 줄이 작음).

[] '

+0

여기 오해를 당했다고 생각합니다. 의도는 함수를 만들어서 대리자에게 전달할 수 있지만 익명의 함수 또는 람다 식을 사용하는 것이 더 깔끔하다는 것입니다. – Fabio

0

일부 UI 변경에 따라 이벤트가 항상 발생하는 것은 아닙니다. 다른 함수가 호출되기 전에 완료해야하는 백그라운드 스레드가 있다고 가정 해보십시오. 이러한 유형의 시나리오에서는 크로스 스레드 알림과 같은 작업을 수행 할 수 있으므로 매우 유용합니다.

0

때때로 익숙한 개념을 참조하여 개념을 단순화하는 데 도움이됩니다. 용기로서 대리인

씽크 (아래 이미지 참조)

enter image description here

함수 = 컨테이너 내부에 맞는 나무 블록.

함수를 매개 변수로 직접 전달할 수는 없지만 대리인을 전달할 수 있습니다!그래서 기본적으로 우리는 나무 블록 (함수)을 컨테이너 (델리게이트)에 넣었습니다. 이제 매개 변수로 전달하고 필요할 때 사용할 수 있습니다.

서명 = 뚜껑. 이렇게하면 올바른 모양의 블록을 컨테이너에 넣을 수 있습니다.

= 컨테이너의 모든 블록 (함수)을 가져 와서 해당 함수를 "호출"하거나 "호출"합니다.

멀티 캐스트 대리자은 하나 이상의 블록을 컨테이너에 넣을 때 (멀티 캐스트 대리자를 호출 할 때 내부의 모든 함수가 호출됩니다).

이벤트은 단순히 잠금 장치가있는 컨테이너 (대리자)입니다. 이것은 누군가가 뚜껑을 열고 내부의 모든 블록을 쏟아내는 것을 방지합니다. 대의원 및 이벤트 이해가 일단 당신이

Simple explanation to delegates and events

또한 더 자세히 읽고 싶은 경우

이 추상화

, 내 블로그에서 가져온되고, 어떻게 그것을 대표를 이해하기 위해 evolution of the delegate보고 가치가있을 것입니다 람다 함수로 진화했다.

이 추상화가 대리인을 더 잘 이해하기를 바랍니다. 확실히 도움이되었습니다.