728x90
반응형

using System;
// C# 델리게이트(Delegate)
// 델리게이트는 메서드를 참조하는 개체로, 메서드를 다른 메서드에 전달하거나 메서드를 반환하는 데 사용된다.
// 델리게이트는 메서드 시그니처를 정의하고, 메서드를 참조하는 개체로 사용된다.
// 다른 프로그래밍 언어에서는 함수 포인터 또는 콜백 함수라고 한다.
// 델리게이트 구현
// 메서드 등록하여 호출하는 예제
delegate int Calcultate(int a, int b); // 델리게이트 선언
class Delegate
{
static int Add(int a, int b) // 델리게이트로 참조할 메서드
{
return a + b;
}
static void Main()
{
// 메서드 등록
Calcultate calc = Add; // 델리게이트에 메서드 등록
Console.WriteLine(calc(3, 4)); // 델리게이트로 메서드 호출
// 출력 결과: 7
// 델리게이트 사용
int result = calc(5, 6); // 델리게이트로 메서드 호출
Console.WriteLine("결과 " + result); // 결과 출력
// 출력 결과: 결과 11
}
// 하나이상의 메서드 등록
// 델리게이트는 하나 이상의 메서드를 등록할 수 있다.
// 델리게이트에 등록된 메서드는 등록된 순서대로 호출된다.
// 델리게이트에 등록된 메서드는 += 연산자를 사용하여 등록한다.
// 델리게이트에 등록된 메서드는 -= 연산자를 사용하여 제거한다.
// 예제
// 델리게이트에 여러 메서드 등록하여 호출하는 예제
delegate void Print(); // 델리게이트 선언
static void Print1() // 델리게이트로 참조할 메서드
{
Console.WriteLine("첫 번째 메서드");
}
static void Print2() // 델리게이트로 참조할 메서드
{
Console.WriteLine("두 번째 메서드");
}
static void Main2()
{
// 메서드 등록
Print print = Print1; // 델리게이트에 메서드 등록
print += Print2; // 델리게이트에 메서드 등록
print(); // 델리게이트로 메서드 호출
// 출력 결과:
// 첫 번째 메서드
// 두 번째 메서드
}
// 델리게이트 제거
// 델리게이트에 등록된 메서드는 -= 연산자를 사용하여 제거할 수 있다.
// 예제
// 델리게이트에 등록된 메서드 제거하는 예제
delegate void Print3(); // 델리게이트 선언
static void Print4() // 델리게이트로 참조할 메서드
{
Console.WriteLine("첫 번째 메서드");
}
static void Print5() // 델리게이트로 참조할 메서드
{
Console.WriteLine("두 번째 메서드");
}
static void Main3()
{
// 메서드 등록
Print3 print = Print4; // 델리게이트에 메서드 등록
print += Print5; // 델리게이트에 메서드 등록
print(); // 델리게이트로 메서드 호출
// 출력 결과:
// 첫 번째 메서드
// 두 번째 메서드
// 메서드 제거
print -= Print4; // 델리게이트에 등록된 메서드 제거
print(); // 델리게이트로 메서드 호출
// 출력 결과:
// 두 번째 메서드
}
// 델리게이트 반환
// 델리게이트는 메서드를 반환하는 데 사용할 수 있다.
// 델리게이트를 반환하려면 델리게이트를 반환 타입으로 지정하면 된다.
// 예제
// 델리게이트를 반환하는 예제
delegate int Calculate2(int a, int b); // 델리게이트 선언
static Calculate2 GetCalculation() // 델리게이트를 반환하는 메서드
{
Calculate2 calc = (a, b) => a + b; // 델리게이트에 람다식으로 메서드 등록
return calc; // 델리게이트 반환
}
static void Main4()
{
// 델리게이트 반환
Calculate2 calc = GetCalculation(); // 델리게이트 반환
Console.WriteLine(calc(3, 4)); // 델리게이트로 메서드 호출
// 출력 결과: 7
}
// 공격 콜백 예제
// 델리게이트를 사용하여 공격 콜백을 구현하는 예제
delegate void Attack(); // 델리게이트 선언
static void SwordAttack() // 델리게이트로 참조할 메서드
{
Console.WriteLine("칼 공격");
}
static void MagicAttack() // 델리게이트로 참조할 메서드
{
Console.WriteLine("마법 공격");
}
static void AttackTarget(Attack attack) // 델리게이트를 매개변수로 받는 메서드
{
attack(); // 델리게이트로 메서드 호출
}
static void Main5()
{
// 공격 콜백
AttackTarget(SwordAttack); // 델리게이트로 메서드 호출
// 출력 결과: 칼 공격
AttackTarget(MagicAttack); // 델리게이트로 메서드 호출
// 출력 결과: 마법 공격
}
}728x90
반응형
'C#' 카테고리의 다른 글
| C# 예외 처리, 값형과 참조형식 (0) | 2025.03.04 |
|---|---|
| C# 인터페이스와 열거형 (0) | 2025.03.03 |
| C# 고급 문법과 기능 (0) | 2025.02.20 |
| C# 클래스와 객체 (0) | 2025.02.13 |
| C# 메서드(Method)와 구조체(Structures) (0) | 2025.02.11 |