반응형
1. 델리게이트 (대리자)
: 메서드를 참조하는 형식으로 대리자에 메서드가 할당되면 대리자는 이 메서드와 똑같은 방식으로 동작한다.
- 대리자를 통해 메서드를 매개 변수로 전달할 수 있다.
- 대리자를 사용하여 콜백 메서드를 정의할 수 있다.
- 여러 대리자를 연결할 수 있다. (델리게이트 체인)
2. 콜백 메서드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
// 델리게이트 선언
public delegate void del(string s);
public static void delegateMethod(string s)
{
Console.WriteLine(s);
}
public static void delCallback(int a, int b, del callback)
{
callback("더하기: " + (a, b).ToString());
}
static void Main(string[] args)
{
// 델리게이트 참조
del handler = delegateMethod;
handler("Hello World!");
delCallback(1, 2, handler);
}
}
}
3. 델리게이트 체인
: 하나의 델리게이트 메서드에 여러 메서드를 연결한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
delegate void MyDelegate();
class Program
{
public static void func1() { Console.WriteLine("func1 호출"); }
public static void func2() { Console.WriteLine("func2 호출"); }
public static void func3() { Console.WriteLine("func3 호출"); }
static void Main(string[] args)
{
MyDelegate del;
// 여러 개의 메서드 참조
del = new MyDelegate(func1);
del += func2;
del += func3;
del();
Console.WriteLine("-----------");
del -= func1;
del -= func3;
del();
}
}
}
4. 익명 메서드
: C# 2.0보다 이전 버전의 C#에서는 명명된 메서드를 사용하는 방법으로만 대리자를 선언할 수 있었지만, C# 2.0에는 무명 메서드가 도입되었고 C#3.0 이상에서는 무명 메서드 대신 람다 식을 사용하는 방식으로 구현 할 수 있다.
- 대리자를 인스턴스화하는 두 가지 방법이 있는데 하나는 대리자를 무명 메서드로 연결하는 방법, 다른 하나는 대리자를 명명된 메서드에 연결하는 방법
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void Del(string s);
class ExClass
{
static void Main(string[] args)
{
Del d = delegate(string s)
{
System.Console.WriteLine(s);
};
d("무명 메서드 호출");
d = new Del(ExClass.MessageShow);
d("명명 메서드 호출");
}
static void MessageShow(string s)
{
System.Console.WriteLine(s);
}
}
}
반응형
'IT Study > C#' 카테고리의 다른 글
[C#] 리플렉션(Reflection), 애트리뷰트(Attribute) (0) | 2021.03.04 |
---|---|
[C#] 확장 메서드, 람다 (0) | 2021.01.25 |
[C#] 프로퍼티(Property), 익명 타입 (0) | 2021.01.25 |
[C#] 암묵적 타입 (0) | 2021.01.25 |
[C#] 스레딩(Threading) (0) | 2021.01.25 |
댓글