프로그래밍

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
22 일 전
@ery

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

0
ery
22 일 전
@ye

야너두?

0
ye
22 일 전
@ery
0

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

 

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

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
181231 [컴퓨터] umpc로 pc 대체 가능함? 6 20130819 0 18 분 전 30
181230 [컴퓨터] 게임 안할경우 그래픽 카드가 성능 향상에 도움이 될까? 2 돼지같은인간 0 45 분 전 51
181229 [견적] 견적좀 알려다오.. ㅣㅓㅣ 0 50 분 전 23
181228 [프로그래밍] gcs 써본사람있어 ? 1 쿠키맛난다 0 52 분 전 32
181227 [모바일] 영상재생용 태블릿 추천좀 부탁함 5 택배4번잃어버린새끼 0 1 시간 전 24
181226 [잡담] 컴퓨터 전기세 많이 나오냐? 7 치즈우유 0 1 시간 전 101
181225 [컴퓨터] 갤럭시북3 울트라 쓰는데 모니터 추천좀요 2 주운거 0 2 시간 전 53
181224 [컴퓨터] 컴퓨터 옆판 따도 온도가 크게 안내려가네? 4 돼지같은인간 0 2 시간 전 77
181223 [컴퓨터] 출장지에서 겜하고싶은데 어떤 방법이 좋을까 ㅠㅠ 6 으악숑 0 3 시간 전 67
181222 [컴퓨터] 2060s 얼마에 팔면될까? 4 트레센카페트 0 3 시간 전 83
181221 [프로그래밍] 초보개발자 질문 두개있음 1 애플훈타 0 3 시간 전 76
181220 [컴퓨터] 완제품 pc 이거어떰 5 오늘날씬널닮아 1 4 시간 전 99
181219 [모바일] 에이닷 전화가 좆같은이유 도의지구 0 4 시간 전 71
181218 [컴퓨터] 독거미 키보드 주문완료 4 화이트커피 1 5 시간 전 89
181217 [정보] 블루투스 동글이 몇분마다 노래가 끊기는거 몇년동안 꾹참고 ... 2 부터시작하는이세... 2 5 시간 전 73
181216 [컴퓨터] 행님들 이거 가격어떰? 5 바이럴시닌자딸치... 0 6 시간 전 78
181215 [잡담] 키보드 키압은 같은데 체감 키압이 다를 수 있음? 5 화이트데이 0 8 시간 전 122
181214 [견적] 담달에 컴터 교체 예정인데 견적 좀.. 16 RishinKim 0 8 시간 전 105
181213 [견적] 견적짜고싶음 근데 1도 모름 11 코코볼추종자 0 12 시간 전 135
181212 [잡담] 다들 알리특가 글카 사고 스스디 사고 씨퓨 사지? 장난없는사람 0 16 시간 전 305