본문 바로가기
프로그래밍/C#

C# 미리 정의된 Delegate에 대해서

by bantomak 2023. 4. 26.

Action<T> Delegate

namespace System
{
    //
    // 요약:
    //     Encapsulates a method that has no parameters and does not return a value.
    public delegate void Action();
}

Action<T> delegate는 하나 이상의 파라미터를 받아들이고, 리턴 값이 없는(void) 함수에 사용되는 delegate이다.

파라미터의 수에 따라 1개부터 16개의 파라미터까지 받아들이는 delegate가 있다.

 

static void Main(string[] args)
{
    // 문자열을 인자로 받는 Action 선언
    Action<string> messageAction = (s => Console.WriteLine(s));
    
    // 인자가 0개면 컴파일 에러
    // Action<string> messageAction = (() => Console.WriteLine(s));

    messageAction("hello, world");
}

 

delegate 선언시 귀여운 보라색 가방 아이콘으로 표시된다.

 

Func<T, TResult> Delegate

namespace System
{
    //
    // 요약:
    //     Encapsulates a method that has no parameters and returns a value of the type
    //     specified by the TResult parameter.
    //
    // 형식 매개 변수:
    //   TResult:
    //     The type of the return value of the method that this delegate encapsulates.
    //
    // 반환 값:
    //     The return value of the method that this delegate encapsulates.
    public delegate TResult Func<out TResult>();
}

Action이 리턴값이 void 인 경우에 사용되는 반면,

Func delegate는 하나 이상의 입력 파라미터를 가지고 반드시 Generic 타입인 리턴값을 가진다.

 

static void Main(string[] args)
{
    // 문자열을 반환값으로 가지는 Func 선언
    Func<string, bool> messageAction;
    messageAction = (s => s == "hello, world");

    messageAction("hello, world");
}

 

Predicate<T> Delegate

namespace System
{
    //
    // 요약:
    //     Represents the method that defines a set of criteria and determines whether the
    //     specified object meets those criteria.
    //
    // 매개 변수:
    //   obj:
    //     The object to compare against the criteria defined within the method represented
    //     by this delegate.
    //
    // 형식 매개 변수:
    //   T:
    //     The type of the object to compare.
    //
    // 반환 값:
    //     true if obj meets the criteria defined within the method represented by this
    //     delegate; otherwise, false.
    public delegate bool Predicate<in T>(T obj);
}

Predicate<T> delegate는 Action/Func delegate와 비슷한데,

리턴값이 반드시 bool이고 하나 이상의 파라미터를 가지는 delegate이다.

 

static void Main(string[] args)
{
    // 문자열을 인자로 받고 bool을 리턴하는 predicate 선언
    Predicate<string> messageAction;
    messageAction = (s => s == "hello, world");

    messageAction("hello, world");
}

 

함께 읽으면 좋은 글

 

C# 대리자, 델리게이트(Delegate)에 대해서

대리자(Delegate)란? 특정 매개 변수 목록과 반환 형식이 있는 매서드에 대한 참조를 나타내는 형식입니다. 대리자를 인스턴스화할 때 호환되는 매개변수 및 반환 형식을 가지는 모든 메서드와 연

jettstream.tistory.com

 

C# event에 대해서 알아보자

event란 무엇인가 C#에서 모든 이벤트(event)는 특수한 형태의 delegate이다. (delegate에 대해서 알고 싶거나 복습하고 싶다면 해당 링크 클릭) 이벤트는 단지 특수한 제약조건이 추가된 delegate라고 생각

jettstream.tistory.com

댓글