1. Func 델리게이트


결과를 반환하는 메소드를 참조하기 위해 만들어졌습니다.

.NET 프레임워크에는 모두 17가지 버전의 Func 델리게이트가 있습니다.


ex)

public delegate TResult Func <out TResult>()

public delegate TResult Func <in T, out TResult> (T arg)

public delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 arg2)

....

public delegate TResult Func <in T1, in T2, ... in T16, out TResult> (T1 arg1, T2 arg2, .... , T16 arg16)


Func 델리게이트는 입력 매개 변수가 하나도 없는 것부터 16개까지 다양한 버전이 존재합니다.

매개 변수가 16개 이상인 경우, 혹은 ref, out한정자로 수식된 매개 변수를 사용해야 하는 경우가

아니라면 .NET에서 제공하는 기본 Func를 사용하면 되겠습니다.


ex)

using System;


namespace FuncTest{


class MainApp{


static void Main(string[] args){


Func<int> func1 = () => 10;

Console.WriteLne("func1 = {0}", func1());


Func<int,int> func2 = (x) => x*2;

Console.WriteLne("func2= {0}", func2(2));


Func<double, double, double> func3 = (x,y) => x*y;

Console.WriteLne("func3 = {0}", func3(2.0 , 3.0));


}

}

}


실행 결과


func1 = 10

func2 = 4;

func3 = 6.00000000000000



2. Action 델리게이트


Action 델리게이트는 Func 델리게이트과 거의 같으나, Action 델리게이트는 변환 형식이 없습니다.

Action 델리게이트도 Func 델리게이트와 마찬가지고 .NET 프레임워크에 17가지 버전이 선언되어 있습니다.


ex)

public delegate void Action <>()

public delegate void Action <in T> (T arg)

public delegate void Action <in T1, in T2> (T1 arg1, T2 arg2)

....

public delegate void Action <in T1, in T2, ... in T16> (T1 arg1, T2 arg2, .... , T16 arg16)


Func와는 달리 결과를 반환하지 않고 일련의 작업을 수행하는 것이 목적입니다.


ex)


using System;


namespace ActionTest{


class MainApp{


static void Main(){


Action ac1 = () => Console.WriteLine("Action()");

act1();


int result = 0;

Action<int> ac2 = (x) => result = x * x;


ac2(3);

Console.WriteLine("result = {0}", result);


Action<double, double> ac3 = (x,y) = > {


double pi = x/y;

Console.WriteLine("Action<T1, T2>({0}, {1}) = {2}", x,y,pi);

};


ac3(22.0, 7.0);

}

}

}


실행 결과


Action()

result = 9

Action<T1, T2>(22, 7) = 3.14285714285714





+ Recent posts