1.11 Delegate
delegate(델리게이트) 타입은 특정 파라미터 목록과 리턴 타입에 대한 참조를 나타낸다. 델리게이트는 메소드를 엔터티처럼 취급해서 변수에 할당하거나 파라미터로 넘길 수 있다. 다른 언어의 함수 포인터(function pointer)와 비슷해보이지만, (C#의)델리게이트는 객체 지향적이고 타입-안정적(type-safe)이다.
using system;
delegate double Function(double x);
class Multiplier
{
double factor;
public Multiplier(double factor)
{
this.factor = factor;
}
public double Multiply(double x)
{
return x * factor;
}
class Test
{
static double Square(double x)
{
return x * x;
}
static double[] Apply(double[] a, Function f)
{
double[] result = new double[a.Length];
for (int i = 0; i <a.Length; i++)
result[i] = f(a[i]);
return result;
}
static void Main()
{
double[] a = {0.0, 0.5, 1.0};
double[] squares = Apply(a, Square); // static method
double[] sines = Apply(a, Math.Sin); // static method
Multiplier m = new Multiplier(2.0);
double[] doubles = Apply(a, m.Multiply); // instance method
double[] dbls = Apply(a, x => x * 2.0); // anonymous functions
for (int i = 0; i < a.Length; i++)
Console.WriteLine("value: {0}", dbls[i]);
}
}
}
'Thinking > Study' 카테고리의 다른 글
python 출력 테스트 (0) | 2015.08.21 |
---|---|
Professional C# 5.0 and .NET 4.5.1 (0) | 2015.05.14 |
요새 읽고 있는 iOS 개발 관련 책들 정리 (0) | 2014.12.29 |
Objective-C 에서 Properties, iVar 설명 (0) | 2014.11.04 |
MANIFEST.MF 파일에서 버전 정보를 얻어오는 방법 (0) | 2014.08.28 |