Skip to content
DarkKaiser의 블로그
DarkKaiser의 블로그
  • 개발 관련 자료(노션)
  • Raspberry Pi(노션)
  • WD My Cloud(노션)
  • GitHub
DarkKaiser의 블로그

delegate 요약

DarkKaiser, 2010년 3월 31일2023년 9월 5일

– 델리게이트를 통해 특정 작업을 캡슐화할 수 있다.

– 델리게이트 인스턴스에 어떤 메서드를 사용할 수 있는지는 델리게이트 타입의 선언에 따라 다르다.

– 델리게이트 인스턴스 생성을 위해서는 호출할 메서드와 (인스턴스 메서드의 경우) 메서드를 호출할 대상이 필요하다.

– 델리게이트 인스턴스는 불변성(immutable)을 갖는다. 한번 생성되고 나면 변경될 수 없다. 이렇기 때문에 델리게이트를 다른 델리게이트와 합친다거나 다른 메서드의 파라미터로 넘길 때 쓰레드 안정성이나 일관성 유지에 대해 고민하지 않아도 된다.(기존의 인스턴스를 합쳐서 새 인스턴스를 생성하면서 원본 인스턴스는 변경하지 않는다.)

– 각각의 델리게이트 인스턴스는 내부적으로 호출 리스트, 즉 동작의 리스트를 갖는다.

– 델리게이트 인스턴스들을 함께 조합하거나 다른 인스턴스에서 제거할 수 있다.

– 델리게이트 인스턴스에 null을 추가하면 null은 빈 호출 리스트를 갖는 델리게이트 인스턴스로 간주된다.

– 이벤트는 델리게이트 인스턴스가 아니다. 그냥 add/remove 메서드 쌍이다.

# 이벤트

event EventHandler Load;

이벤트는 델리게이트 타입으로 선언을 한다.

이벤트가 애초에 생겨난 이유는 데이터 접근에 한 단계를 더 추가하여 캡슐화를 강화한다.

이벤트를 받도록 등록하거나 등록을 해제하는 경우 델리게이트 타입 필드를 +=과 -= 연산자를 통해 직접 사용하는 것처럼 보인다. 하지만 실제로는 메서드(add/remove)가 호출된다.

컴파일러는 위의 선언을 add/remove 기본 메서드 구현과 private인 델리게이트 타입 필드로 변환해준다. 클래스 내부에서는 이것이 필드로 보이고 외부에서는 이것이 이벤트로만 보인다.

C# delegateevent

글 내비게이션

Previous post
Next post

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최신 글

  • AssertJ 소개testCompile ‘org.assertj:assertj-core:3.6.2’ 2017년 9월 14일
  • 자주 사용되는 Lombok 어노테이션 2017년 9월 14일
  • 유니코드 #3 2017년 9월 14일
  • 유니코드 #2 2017년 9월 14일
  • 유니코드 #1 2017년 9월 14일

최신 댓글

    카테고리

    • 개인 자료 (1)
      • 일기 (1)
    • 주절주절 (7)
    • 프로그래밍 갤러리 (16)
    • 프로그래밍 언어 (186)
      • Java (29)
      • C/C++/VC++ (114)
      • C# (11)
      • Visual Basic (6)
      • 안드로이드 (9)
      • Objective-C (5)
      • JavaScript (4)
      • JSP/Servlet (2)
      • Python (4)
      • 어셈블러 (1)
    • 개발++ (44)
      • Book (11)
        • Joel On Software (10)
      • 프로젝트 관리 (6)
      • Maven (1)
      • 디버깅 (1)
      • DirectX (1)
      • Silverlight (1)
      • RESTful (1)
      • Hacking (1)
      • WDM (4)
      • VoIP (5)
      • 기타 (1)
    • 개발 도구 (15)
      • eclipse (14)
      • Sublime Text (1)
    • 네트워크 (7)
    • 설치 및 배포 (7)
      • InstallShield (2)
      • NSIS (4)
    • 버전 관리 (9)
      • Git (2)
      • CVS (2)
      • Subversion (5)
    • 데이터베이스 (7)
      • Oracle (3)
      • Sybase (2)
      • MS-SQL (2)
    • 단위테스트 (3)
      • JUnit (1)
      • NUnit (2)
    • 버그추적시스템 (2)
      • mantis (2)
    • 운영체제 (7)
      • Windows (5)
      • 리눅스 (2)
    • WAS (3)
      • WebLogic (3)
    • 디자인패턴 (1)
    • 디지털 이미지 프로세싱 (16)

    태그

    Ant CodeSign Collection COMAdmin CPagerCtrl DDR Encoding Enumeration FileInputStream FormView IHTMLDocument2 InstallShield IP IwebBrowser2 JSP mantis MRU NSIS OCX SDRAM setup SIP strsafe subversion toolbar UTF8 XML XP 테마 공과금처리시스템 다국어 닥터왓슨 디코딩 로그 배열 버전관리 서명 시스템에러메시지 실버라이트 입력 스트림 출력 스트림 코드사이닝 탐색기 툴바 파이썬 한글

    메타

    • 로그인
    • 엔트리 피드
    • 댓글 피드
    • WordPress.org
    ©2025 DarkKaiser의 블로그 | WordPress Theme by SuperbThemes