■ 대리자(Delegate) :
- 메서드(Method)를 대신 실행하는 객체로 실행할 메서드는 컴파일 시점이 아닌 실행 시점에 결정
- delegate 키워드로 선언
- 메서드(Method)처럼 매개변수와 반환 형식을 가짐
- delegate에 Method를 참조할 때는 반환 형식과 매개변수 구조가 같아야 한다
■ Example
using System;
namespace DelegateExample
{
class Program
{
delegate void MyDelegate(int num);
static void Method_A(int a)
{
Console.WriteLine($"[Method_A] a = {a}");
}
static void Method_B(int b)
{
Console.WriteLine($"[Method_B] b = {b}");
}
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(Method_A);
myDelegate(100);
myDelegate = new MyDelegate(Method_B);
myDelegate(200);
}
}
}
■ 대리자 체인(Delegate Chain) :
- 하나의 대리자(delegate)에 여러 개의 method를 참조할 수 있음
- 체인 연결 : +=
- 체인 끊기 : -=
■ Example
using System;
namespace DelegateExample
{
class Program
{
delegate void MyDelegate(string str);
static void Method_A(string a)
{
Console.WriteLine($"[Method_A] a는 {a}입니다.");
}
static void Method_B(string b)
{
Console.WriteLine($"[Method_B] b는 {b}이다.");
}
static void Method_C(string c)
{
Console.WriteLine($"[Method_C] c = {c}");
}
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(Method_A);
myDelegate += new MyDelegate(Method_B);
myDelegate += new MyDelegate(Method_C);
myDelegate("memoo");
Console.WriteLine();
myDelegate -= Method_C;
myDelegate("memoo");
}
}
}
■ 익명 메서드(Anonymous Method) :
- 다른 블록에서 재사용될 일이 없는 이름 없는 메서드(Method)
- 대리자(delegate)의 형식에 맞게 익명 메서드를 작성해야 한다
■ Example
using System;
namespace AnonymousMethodExample
{
class Program
{
delegate int MyDelegate(int a, int b);
static void Main(string[] args)
{
MyDelegate myDelegate;
myDelegate = delegate (int a, int b)
{
return a + b;
};
Console.WriteLine($"result = {myDelegate(100, 200)}");
}
}
}
'개인공부 > C#' 카테고리의 다른 글
[C#] 대리자(Delegate), 이벤트(Event) 차이점 (0) | 2023.02.15 |
---|---|
[C#] 이벤트(Event) (0) | 2023.02.14 |
[C#] 예외(Exception) (0) | 2022.10.07 |
[C#] 일반화(Generalization) (0) | 2022.09.26 |
[C#] 인덱서(Indexer), IEnumerable, IEnumerator (0) | 2022.09.26 |