프로그래밍

c# 이벤트와 델리게이트

이벤트와 델리게이트의 차이가 너무 궁금합니다.

인터넷 뒤져보니 델리게이트(대리자)는 callback 용으로 사용하는데

 

사실 이벤트도 델리게이트로 만드는 거니 뭔 차이가 있나 싶습니다.

 

public delegate void EventHandler();
public event EventHandler Click;

 

인터넷에서 뒤져보니깐 인터페이스는 델리게이트는 못 가지지만

이벤트는 가질 수 있다고 해서 해보니 자식에서 반드시 재정의 해야 하는 구조이던데요

 

// 예시

public delegate void EventHandler();
        
public interface ITestInterface
{
     public event EventHandler Click; // 가능
     //public EventHandler temp;         // 컴파일 에러
}

 

public class Base : ITestInterface
{
     public event EventHandler OnClick;  // 반드시 정의 필요(abstract 함수처럼 자식에서 재정의가 필요)
}

 

 

뭐 더 다른거는 없나요?

13개의 댓글

22 일 전

delegate를 활용해 event를 구현하고 있기 때문에, delegate의 확장으로도 볼 수 있을 것 같아요.

delegate는 단순히 메서드에 대한 참조를 할 수 있는 것이고, event는 말 그대로 어떤 행위를 알리는 이벤트를 의미합니다.

event handler가 delegate를 통해 구현되고 있을 뿐이죠.

0
22 일 전
@감귤칩

그럼 event는 델리게이트 말고 어떤 걸로 구현할 수 있나요?

0
22 일 전
@RX7900XTX

Action, Function? 이것도 결국 콜백용 인데 흠....

사실 둘 다 구분 없이 써도 문제가 없지 않을거 같은데 이 모호함이 정말 어렵네요;;;

0
22 일 전

event와 delegate의 차이점은, event는 public으로 선언되어 있어도 자신이 선언된 클래스 외부에서는 호출이 불가능합니다. delegate는 자신이 선언된 클래스 외부에서도 호출이 가능합니다. 라이브러리 같은 것을 만들 때 어떤 중요한 역할을 하는 이벤트가 있다면 이것을 외부에서 마음대로 발생시킬 수 있게 하고싶지는 않겠죠. 라이브러리 사용자는 단지 event에 handler 함수를 부착할 수 있기만 하고, event를 호출하지는 못해야 합니다. 그래서 event를 사용합니다.

0
22 일 전
@무쳐

하지만 event 위어 선언되는건 main 함수에서 호출되던데요?

0
21 일 전
@RX7900XTX

뭔말이죠?

0
21 일 전
@무쳐

아 이벤트는 외부에서 바인드가 가능하지만 해당 클래스 내부에서만 호출이 가능하네요

외부에서 호출하는 건 줄 알 았는데 확인해보니 바인드만 가능하군요?

0
ye
20 일 전
@RX7900XTX

넹 클래스 외부에서는 add/remove 밖에 안돼오

0
ery
22 일 전

Delegate : functuon pointer

Event : callback

 

완전히 같은건 아니지만 대강 이런 느낌

1
ye
21 일 전
@ery

기존 개념에 대입하면 얼추 이게 맞음

0
ery
21 일 전
@ye

야너두?

0
ye
21 일 전
@ery
0

델리게이트는 변수이고 이벤트는 프로퍼티의 개념임. 프로퍼티와 동일하게 외부에서 델리게이트를 직접 호출하지 못하도록 하는 접근제한, 그리고 메소드화를 통한 캡슐화에 의의가 있음.

 

이벤트는 델리게이트로 만들어 진다는 건 틀린 생각임. 델리게이트를 통하지 않더라도 이벤트를 만들고 커스텀 add/remove 를 정의하는 게 가능함. 기본 이벤트는 델리게이트를 backing field로 가진 오토프로퍼티로 보면 되고.

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
181227 [컴퓨터] 뻑난 하드는 복구하기 힘듬? 독거노인 0 1 분 전 1
181226 [컴퓨터] 출장지에서 겜하고싶은데 어떤 방법이 좋을까 ㅠㅠ 3 으악숑 0 17 분 전 18
181225 [컴퓨터] 2060s 얼마에 팔면될까? 4 트레센카페트 0 19 분 전 26
181224 [프로그래밍] 초보개발자 질문 두개있음 1 애플훈타 0 27 분 전 33
181223 [컴퓨터] 완제품 pc 이거어떰 4 오늘날씬널닮아 1 1 시간 전 66
181222 [모바일] 에이닷 전화가 좆같은이유 도의지구 0 1 시간 전 55
181221 [컴퓨터] 독거미 키보드 주문완료 3 화이트커피 1 1 시간 전 74
181220 [정보] 블루투스 동글이 몇분마다 노래가 끊기는거 몇년동안 꾹참고 ... 1 부터시작하는이세... 2 2 시간 전 56
181219 [컴퓨터] 행님들 이거 가격어떰? 5 바이럴시닌자딸치... 0 3 시간 전 67
181218 [잡담] 키보드 키압은 같은데 체감 키압이 다를 수 있음? 3 화이트데이 0 5 시간 전 104
181217 [견적] 담달에 컴터 교체 예정인데 견적 좀.. 14 RishinKim 0 5 시간 전 92
181216 [견적] 견적짜고싶음 근데 1도 모름 11 코코볼추종자 0 9 시간 전 122
181215 [잡담] 다들 알리특가 글카 사고 스스디 사고 씨퓨 사지? 장난없는사람 0 13 시간 전 289
181214 [컴퓨터] 알리특가 글카 샀음 3 광어우럭따 1 14 시간 전 448
181213 [컴퓨터] 파워 추천좀해주세요 7 은평구청년 1 15 시간 전 89
181212 [잡담] 멀티탭추천점 3 전업주부하고싶다 0 17 시간 전 170
181211 [잡담] 무한재부팅된다건 개붕이입니다..... 3 아이톨쥬 0 17 시간 전 104
181210 [잡담] 의자 추천좀(t50빼고) 4 섭탱 0 17 시간 전 125
181209 [잡담] 게임패드 고쳤다! 4 오브 1 18 시간 전 129
181208 [컴퓨터] 컴퓨터본체 방밖으로 옮긴 개붕이 있냐... 13 크크르큭 1 21 시간 전 283