================================ Outline ====================================
람다식
델리게이트
----------------------------------------------------------------------------
람다식
람다식은 익명의 메소드를 만드는 또 하나의 방법이다.
람다식의 문법은 다음과 같다.
매개_변수_목록 => 식
ex) Calculate calc = (int a, int b) => a + b;
형식 유추(Type interface)
람다식의 매개 변수 타입을 컴파일러가 유추해주는 기능
// 함수와 메소드의 차이 => 메소드는 인스턴스를 생성해주어야 사용가능하지만 함수로 개별적으로 호출 가능하다.
단 하나의 익명 메소드 혹은 무명 함수를 만들기 위해 매번 델리게이트를 선언해주어야 하는 불편을 덜어주기 위해 Func델리게이트와 Action델리게이트가 있다.
Func 델리게이트는 반환 값이 있는 익명 메소드/무명 함수를 위한 델리게이트, Action 델리게이트는 반환 값이 없는 익명 메소드/무명 함수를 위한 델리게이트이다.
앞에 모든 설명은 Func와 Action델리게이트를 사용하기 위한 설명이었다.
델리게이트와 람다는 떼어 놓고 설명할 수 없다. 람다를 이해하기 위해서는 델리게이트의 기초 지식이 필요하다.
문장 형식의 람다식의 내용은 {}로 내용을 싼다.
ex)
delegate void DoSomething();
DoSomething DoIt = () =>
{
Console.WriteLine("뭔가를“);
Console.WriteLine("출력해보자“);
Console.WriteLine("이렇게!“);
}; //문장 형식의 람다식은 끝에 세미콜론 ‘;’을 넣어준다.
DoIt;
Func 델리게이트 - 반환 값을 반환하는 메소드를 참조하기 위해 만들어진 델리게이트
p/423 예제, Func의 사용
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _20150616_func
{
class Program
{
static void Main(string[] args)
{
Func<int> func1 = () => 10;
Console.WriteLine("func1() : {0}", func1());
Func<int, int> func2 = (x) => x * 2;
Console.WriteLine("func2(4) : {0}", func2(4));
Func<double, double, double> func3 = (x, y) => x / y;
Console.WriteLine("func3(22, 7) : {0}", func3(22, 7));
}
}
}
Action 델리게이트 - 반환 값이 없는 메소드를 참조하기 위해 만들어진 델리게이트
p/425 예제, Action의 사용
using System; |
델리게이트
람다를 제대로 이해하기 위해 소홀히 하고 넘어갔단 델리게이트의 내용을 다시 한번 살펴보자.
델리게이트를 이용하여 콜백을 구현하는 과정은 다음과 같다.
1. 델리게이트를 선언한다.
2. 델리게이트의 인스턴스를 생성한다. 인스턴스를 생성할 때는 델리게이트가 참조할 메소드를 매개 변수로 넘긴다.
3. 델리게이트를 호출한다.
//델리게이트는 변수의 성격을 띄기 때문에 함수의 인자로 넣어줄 수 있다.
p/390 델리게이트 예제,
using System; |
델리게이트는 보통의 메소드뿐 아니라 일반화 메소드도 참조할 수 있다. 이 경우에는 일반화 메소드를 참조할 수 있도록 형색 매개 변수가 사용되어야 한다.
ex) delegate int compare<T>(T a, T b);
델리게이트는 여러 가지 메소드를 동시에 참조할 수 있다. 이 때 결합기호 ‘+=’를 사용한다.
ex) ThereIsAFire Fire = new ThereIsAFire( Call119 );
Fire += new ThereIsAFire( ShotOut );
Fire += new ThereIsAFire( Escape );
결합해 놓은 델리게이트를 출력하면, 결합된 내용이 한 번에 출력된다.
‘=>’는 이동 연산자이다.
익명 메소드의 선언과 사용방법
익명 메소드는 이름이 없는 메소드이다. 사용 방법은 다음과 같다.
ex) Calculate Calc;
Calc = delegate (int a, int b)
{
return a + b;
}
'Busan IT > 제어 UI(C#)' 카테고리의 다른 글
LINQ(2) (0) | 2015.06.18 |
---|---|
LINQ (0) | 2015.06.17 |
슬라이더 박스 (0) | 2015.06.15 |
델리게이트와 이벤트, winform에서 구구단 작성 (0) | 2015.06.12 |
WinForm 만들기 (0) | 2015.06.11 |