본문 바로가기
KDT/C# 프로그래밍

23/07/27 대리자

by 잰쟁 2023. 7. 27.
728x90

대리자(delegate)
- 대리자는 인스턴스가 아닌 형식!!
- 인스턴스화 필수
- 대리자는 메서드를 다른 메서드의 인수로 전달 가능
(대리자 인스턴스가 필요, 인스턴스에 메서드 연결하여 사용)

1. 형식 생성
2. 인스턴스 생성
3. 메서드 연결
4. 사용

-사용자 지정형식
enum / class/ struct/ delegate


람다
- 익명 함수를 만들기 위해 사용
- 람다 선언 연산자: =>

 

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



namespace Starcraft
{
    public class App
    {

        //2. 대리자 형식 정의
        delegate void MyDelegate(string name);
       
        //생성자
        public App()
        {

            //3. 대리자 인스턴스화
            MyDelegate MyDel = new MyDelegate(this.SayHello);

            //4. 대리자 호출
            MyDel("홍길동");

        }

        //1. 메서드 정의
        void SayHello(string name)
        {
            Console.WriteLine("{0}님 안녕하세요~", name);
        }

        void ByeBye(string name)
        {
            Console.WriteLine("{0}님 안녕히 가세요~", name);
        }
    }
}

 

무명메서드

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

namespace Starcraft
{
    public class App
    {
        //1. 대리자 형식 정의
        delegate void MyDel();

        //생성자
        public App()
        {
            //2. 대리자 인스턴스화 (무명메서드연결)
            MyDel del = delegate () {
                Console.WriteLine("안녕하세요.");
            };

            //3. 대리자 호출
            del();
        }
    
    }
}

무명메서드2

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

namespace Starcraft
{
    public class App
    {
        //1. 대리자 형식 정의
        delegate int MyDel(int a, int b);

        public App()
        {
            //2. 대리자 인스턴스화 (익명메서드)
            MyDel del = delegate (int a, int b) {
                return a + b;
            };

            //3. 대리자 사용
            int sum = del(1, 2);
            Console.WriteLine(sum);
        }
    
    }
}