Dev/C#
C# delegate (대리자)
어클
2020. 9. 21. 21:20
반응형
대리자는 람다(lamda)와 개념이 같다고 보아도 됩니다.
대리자를 사용하면 함수를 모아 놓았다 나중에 실핼하거나 실행을 취소할수 있습니다.
대리자는 내부적으로 MulticastDelegate 클래스에서 기능을 상속합니다.
대리자는 앞으로 배울 이벤트(event)를 만들어 내는 중간 단계의 키워드로 존재합니다.
using System;
class Program
{
// 함수 생성 -> 매개변수도 없고 반환값도 없는 함수
static void Hi() => Console.WriteLine("안녕하세요.");
// 대리자 생성 -> 매개변수도 없고 반환값도 없는 함수를 대신 실행 할 대리자.
delegate void SayDelegate();
static void Main(string[] args)
{
// Hi 함수를 say 이름으로 대신해서 호출
SayDelegate say = Hi;
say();
// Hi함수를 hi 이름으로 대신해서 호출: 또 다른 모양
var hi = new SayDelegate(Hi);
hi();
}
}
대리자로 함수 대신 호출
class Program
{
// 대리자 생성
delegate void SayPointer();
// 샘플 함수 생성
static void Hello() => Console.WriteLine("Hello Delegate");
static void Main(string[] args)
{
// 대리자 인스턴스 생성 후 매개변수로 대신 실행 할 함수 이름 전달
SayPointer sayPointer = new SayPointer(Hello);
// 대리자 인스턴스로 함수 대신 호출하는 두 가지 방법
sayPointer(); // 대리자 변수에 괄호를 붙여 메서드 호출
sayPointer.Invoke(); // 명시적으로 Invoke() 메서드 호출
}
}
이름 없는 메서드를 대신 호출
class Program
{
delegate void SayDelegate();
static void Main(string[] args)
{
// delegate 키워드 함수를 바로 정의해서 사용
SayDelegate say = delegate ()
{
Console.WriteLine("반갑습니다.");
};
say();
}
}
함수 포인터
반응형