Delegates
- 함수의 참조를 담을수있는 타입.
- C언어의 함수포인터와 유사함.
사용순서
- Delegate를 만든다.
delegate void Example();
- Delegate 객체를 만들어 선언 및 초기화 한다.
Example ex = () => {Console.WriteLine("Tada");};
- ex() 와 같이 호출해 사용한다.
ex();
익명함수
delegate(int a) { return a + 1; };
- 메소드 선언 필요 없이 Delegate를 생성할수 있다.
람다식
(int a) => { return a + 1; };
- 익명함수를 더 간단하게 사용할수 있다.
- 익명함수 또는 람다식에 로컬 변수를 직접 사용할수도 있다, 이 경우 값이 아닌 참조를 통해 사용한다.
대표적인 Delegate Type, Type<T, Treturn>
- 제네릭을 통해 한개의 패러미터 입력 타입과 리턴 타입을 지정한다.
- <int, int, int> 와 같이 2개의 int를 받고 1개의 int 를 리턴하는 식으로 지정 또한 가능하다.
Func<int, int> Example = (int a) => { return a * 2; };
Multicast Delegate
Func<> Example a;
a += () => { Console.WriteLine(1); };
a += () => { Console.WriteLine(2); };
- Delegate 에 += 연산을 통해 메소드를 추가할수 있으며, 추가된 모든 메소드를 실행하게 된다.
- -= 연산자를 통해 추가되었던 값을 다시 뺄수도 있다.
- 위와 같이 여러개를 실행하고자 할 경우, 실행되는 함수들의 리턴값은 void여야만 한다.