Programming/C# - Window

C#/ 델리게이트와 이벤트(delegate, event)

esoog Polaris 2023. 10. 10. 16:45
반응형

**델리게이트 (Delegate)**:

1. **개념**:
   - 델리게이트는 메서드를 참조할 수 있는 형식으로, 메서드를 변수처럼 저장하고 전달할 수 있도록 해줍니다.
   - 델리게이트는 대리자 역할을 하며, 다른 메서드를 호출하거나 이벤트 처리를 위해 사용됩니다.

2. **사용 예**:
   - 델리게이트는 일반적으로 콜백 메서드, 이벤트 핸들러 등을 저장하고 호출하는 데 사용됩니다.
   - 다른 객체에 대한 참조를 저장하고 해당 객체의 메서드를 호출할 수 있습니다.

3. **예시**:

   // 델리게이트 정의
   delegate void MyDelegate(string message);

   // 델리게이트 인스턴스 생성
   MyDelegate myDelegate = Console.WriteLine;

   // 델리게이트를 사용하여 메서드 호출
   myDelegate("Hello, World!");

 

 



**이벤트 (Event)**:

1. **개념**:
   - 이벤트는 클래스나 객체가 다른 클래스나 객체에 대한 알림을 제공하고 해당 알림에 대한 응답으로 메서드를 호출하는 데 사용됩니다.
   - 이벤트는 델리게이트를 기반으로 하며, 특정 이벤트가 발생하면 연결된 이벤트 핸들러 메서드가 호출됩니다.

2. **사용 예**:
   - 이벤트는 사용자 인터페이스 컨트롤에서 버튼 클릭, 키보드 입력 등과 같은 작업에 대한 응답으로 사용됩니다.
   - 클래스 내에서 중요한 상태 변경을 알리고 처리할 때도 사용됩니다.

3. **예시**:

   // 이벤트 정의
   public event EventHandler MyEvent;

   // 이벤트 핸들러 메서드 정의
   private void HandleEvent(object sender, EventArgs e)
   {
       Console.WriteLine("Event handled.");
   }

   // 이벤트 핸들러 등록
   MyEvent += HandleEvent;

   // 이벤트 발생
   MyEvent?.Invoke(this, EventArgs.Empty);

 

 



**차이점과 비교**:

- **역할**:
  - 델리게이트: 메서드의 참조를 저장하고 호출하는 데 사용됩니다.
  - 이벤트: 다른 객체에 대한 알림을 제공하고 해당 알림에 대한 응답으로 이벤트 핸들러 메서드를 호출하는 데 사용됩니다.

- **구조**:
  - 델리게이트: 단독으로 사용되며 메서드 참조만 저장합니다.
  - 이벤트: 델리게이트를 기반으로 하며 이벤트 핸들러를 등록 및 해제하는 데 사용됩니다.

- **호출 방식**:
  - 델리게이트: 직접 호출됩니다.
  - 이벤트: 이벤트가 발생할 때 연결된 이벤트 핸들러 메서드가 자동으로 호출됩니다.

델리게이트는 메서드 호출을 직접 관리하고자 할 때 사용되며, 이벤트는 다른 객체에 상태 변경을 알리고 응답을 처리하는 데 사용됩니다. 이벤트는 보통 델리게이트를 내부적으로 사용하여 이벤트 핸들러를 호출합니다.

 

 

 

 

https://lab.cliel.com/entry/C-%EB%8C%80%EB%A6%AC%EC%9E%90%EC%99%80-%EC%9D%B4%EB%B2%A4%ED%8A%B8

 

[C#] 대리자와 이벤트

1. 대리자 (델리게이트) 만약 아래와 같이 숫자를 계산해 주는 메서드가 존재할 때 class Cal { public int Sum(int i, int j) { return i + j; } } 이 메서드를 호출해 계산을 수행하려면 다음과 같이 메서드를 호

lab.cliel.com

 

 

728x90

'Programming > C# - Window' 카테고리의 다른 글

C#/ 이벤트 핸들러 함수(Event Handler)  (0) 2023.10.12
C#/ partial 클래스  (0) 2023.10.12
C#/ Regex(정규 표현식) 사용  (0) 2023.10.10
C#/ 스트림(stream)  (0) 2023.10.10
C#/ CefSharp 사용  (0) 2023.10.10