이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20054|회답: 0

[출처] C# 고급 개념을 빠르게 이해하기 (1) 대리인 위임

[링크 복사]
게시됨 2017. 1. 19. 오후 3:18:00 | | | |
저는 오랫동안 .NET 개발을 해왔고, 최근에 "C# Advanced Programming"이라는 책을 리뷰했습니다. 한때 이해한다고 생각했지만 이해하지 못했던 많은 문제들이 사실은 천천히 공부하고 이해할 수 있다는 것을 알게 되었습니다.

그래서 저는 "C# 고급 프로그래밍 시리즈"에 관한 블로그 글을 쓰기 시작할 계획입니다. 이 글은 "C# Advanced Programming" 책의 개념을 바탕으로 하며, 다른 전문가들의 블로그 글도 참고할 예정이니 이해해 주셨으면 합니다. 문제가 있으면 꼭 바로잡아 주세요.

(또한: 이 블로그 글에서는 정의와 문법의 기본을 설명하지 않습니다.) )



시운전에 대해 이야기해 봅시다.

Delegate는 .NET에서 널리 사용됩니다. 람다 표현식, 이벤트, 익명성 방법 등이 포함될 예정입니다(후속 블로그 글도 기대해 주세요).

그렇다면 위탁이란 무엇일까요?

쉽게 말해, 대의자는 메서드를 지정하는 것과 다르지 않지만, 대리자 키워드를 지정해야 하고 메서드 엔티티가 없다는 점이 다릅니다. 예를 들어, 무엇을 다룰지 모른 채 코드를 작성할 때 임시 표시자라고 생각할 수 있습니다. 도입할 매개변수 유형과 출력 유형을 알고 정의하기만 하면 됩니다. 책에서 전달하는 방식은 서명이 반드시 같은 의미여야 한다는 것입니다.

기본적인 위임을 정의해 봅시다:





실행 결과:
위에서 말한 실용적인 신뢰 장소를 보시나요? 즉,대리자는 동일한 인제스팅 매개변수 유형과 반환 유형을 가진 어떤 메서드도 실행할 수 있고, 심지어 동일한 서명을 가진 메서드 큐도 실행할 수 있습니다.

그렇다면 메서드 시그니처(즉, 가져오기와 출력 매개변수)가 정말로 대리자와 정확히 같아야 하나요? 답변: 아니요, 공분산과 역변이를 무시할 수 없습니다.
공변과 인버터에 대한 지식을 간단히 소개해 보겠습니다.

"공분산"이란 원래 지정된 파생 타입보다 더 파생된 타입을 사용할 수 있는 것을 의미합니다.
"인버터"는 파생 정도가 적은 타입을 사용할 수 있는 능력을 의미합니다.
그리고 우리의 위탁도 공분산과 역함수의 영향을 받습니다.

즉, 위임자가 정의되면 동일한 서명 메서드만이 위임자 변수에 값을 할당할 수 있습니다.
메서드의 매개변수 테이블이 대리자 선언과 일치하지만 파생 클래스를 반환한다면(대의자 선언이 타입을 반환한다면), 이 메서드도 이 대리자 변수에 할당할 수 있다.
메서드의 반환 타입이 delegate의 선언과 일치하지만, 인자가 delegate 선언 매개변수 타입의 조상 클래스라면, 메서드는 delegate 변수에도 할당할 수 있습니다.
메서드의 매개변수와 반환 타입이 위 두 줄의 가정과 일치하면, 메서드는 위임자 변수에도 할당할 수 있습니다.

다음은 공변 vs. 인버터의 간단한 예시입니다:

공분산:

인버터:







이전의:MFC 설계
다음:파일이 어떤 프로세스에 PID를 할당하는지 알아보는 방법
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com