본문 바로가기
c#/수업 내용

대리자 익명 함수 정의 (*꼭 알아야 할 것*)

by 이지훈26 2021. 9. 7.

*****익명 함수 (*꼭 알아야 할 것*)
익명 함수는 대리자 형식이 예상되는 곳에서 항상 사용할 수 있는 “인라인” 문 또는 식입니다. 
이를 사용하여 명명된 대리자를 초기화하거나 명명된 대리자 형식 대신 이를 메서드 매개 변수로
전달할 수 있습니다.
람다 식 또는 무명 메서드를 사용하여 익명 함수를 만들 수 있습니다.
이해하기 쉬운 방법을 제공 하는 람다 식을 사용하는 것이 좋습니다.

 

익명 함수를 만들 수 있는 방법에는 두가지가 있다

1. 람다식

2. 무명메서드

delegate 연산자는 대리자 형식으로 변환될 수 있는 무명 메서드를 만듭니다.



대리자 클래스 Action<T.....T16>
public delegate void Action<in T><T obj>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld1
{
    class App
    {
        //매개변수가 있는 대리자 정의
        delegate void Del(int a);

        //생성자
        public App()
        {
            //무명 메서드
            Action action = delegate {
                Console.WriteLine("Hello World!");
            };

            Action<int> action2 = delegate
            {
                Console.WriteLine("?");
            };
            action2(1);

            Action<int> action3 = delegate (int a)
            {
                Console.WriteLine(a);
            };
            action2(2);

        }
    }
}

*람다식
‘람다 식’을 사용하여 익명 함수를 만듭니다. 람다 선언 연산자=>를 사용하여 본문에서 람다의 매개 변수 목록을 구분합니다.

람다 식은 두가지 이다.

1.식 람다
(input-parameters) => expression

2.문 람다
(input-parameters) => { <sequence-of-statements> }

***람다 식은 대리자 형식으로 변환할 수 있습니다.
람다 식에서 값을 반환하지 않는 경우 Action 대리자 형식 중 하나로 변환할 수 있습니다.
값을 반환하는 경우 Func 대리자 형식으로 변환할 수 있습니다.


     <매개변수/반환타입>
     Func<int, int> square = x => x * x;
           대리자 변수 선언  /    람다 식


**람다식을 왜만드니? 익명 함수 메서드를 만들기 위해서!**

*식 람다
=> 연산자의 오른쪽에 식이 있는 람다 식을 식 람다라고 합니다. 식 람다는 식의 결과를 반환하며 기본 형식은 다음과 같습니다.

-람다 식의 입력 매개 변수는 괄호로 묶습니다. 입력 매개 변수가 0개이면 다음과 같이 빈 괄호를 지정합니다.


*문 람다
문 람다는 다음과 같이 중괄호 안에 문을 지정한다는 점을 제외하면 식 람다와 비슷합니다.
람다 식의 입력 매개 변수는 괄호로 묶습니다. 입력 매개 변수가 0개이면 다음과 같이 빈 괄호를 지정합니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld1
{
    class App
    {
        //생성자
        public App()
        {
            //무명 메서드
            Action action = () => { };   //() => { }; = 람다문 , Action은 대리자

            //action의 값? Action대리자 클래스의 인스턴스

            //대리자 인스턴스를 통해서 메서드 호출
            action();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld1
{
    class App
    {
        //생성자
        public App()
        {
            //매개변수 1개가 있는 대리자 변수에 람다문을 할당
            //Action대리자 클래스 인스턴스화
            Action<string> action = (name) => {
                Console.WriteLine("Hello {0}", name);
            };

            action("홍길동");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld1
{
    class App
    {
        //생성자
        public App()
        {
            //매개변수 2개가 있는 대리자 변수에 람다문을 할당
            //Action대리자 클래스 인스턴스화
            Action<string, int> action = (name, age) => {
                Console.WriteLine("name {0}, age: {0}",name, age);
            };

            action("홍길동", 31);
        }
    }
}

'c# > 수업 내용' 카테고리의 다른 글

Linq 정의  (0) 2021.09.08
람다 식 연습  (0) 2021.09.07
멀티캐스트 대리자 정의  (0) 2021.09.07
오전 수업 대리자 연습 (고블린, SCV)  (0) 2021.09.07
대리자 수정하기 연습  (0) 2021.09.06