반응형
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");
}
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#' 카테고리의 다른 글
C# 히트맵(HeatMap) 그리기 (4) | 2023.05.08 |
---|---|
C# 날짜 서식 지정자(Datetime Format Specifier)에 대해서 (6) | 2023.05.04 |
인물 탐구 - C#의 아버지 아네르스 하일스베르(Anders Hejlsberg) (14) | 2023.04.24 |
C# 쓰레드(Thread)에 대해서 (10) | 2023.04.19 |
C# is, as, typeof(), GetType() Type-testing 연산자에 대해서 (8) | 2023.04.12 |
댓글