[C#] Delegate는 왜 Reference 타입일까?
카테고리: CSharp
Delegate에 대해 공부하다가 알게된 정보를 정리한 글입니다.
참고 책 : CLR via C#
Delegate는 왜 Reference 타입일까?
- delegate를 통해 타입을 만들 때 컴파일러가
System.MulticastDelegate
를 상속받는 Class를 만든다 - delegate의 중요 필드
_target
: 연결한 메서드의 객체의 참조를 가지게 된다- Static 메서드인 경우 null로 된다
_methodPtr
: 메서드 주소 포인터_invocationList
: delegate chain을 생성하면 delegate 배열을 참조한다
참고
- delegate는
Immutable(불변성)
이다Combine
시 기존 객체가 변경되는 것이 아닌 새로운 delegate 객체를 생성한다Remove
시 배열에 남은 요소가 하나라면 해당 남은 요소를 반환하고 만약 여러 요소가 남았다면 새로운 delegate 객체를 생성한다- 불변성이니 멀티스레드 환경에서 안전하다
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기