성장일기

07/23 C#복습 - 델리게이트 본문

프로그래밍언어/C#

07/23 C#복습 - 델리게이트

김몽몽 2020. 7. 23. 18:24

메소드는 return해준다

(Add와 Div의 변수이름이 같아도 되지만 임의로 3,4로 설정했음)


메소드를 가리키는 타입 : delegate


NewType은 OnePlus의 별칭이라고 볼 수 있다

델리게이트를 쓰면 반복문도 만들 수 있다

한가지의 이름으로 여러 메소드를 가리킬 수도 있음
같은것을 알 수 있음


using System;

public class Mathmatics
{
    delegate int CalcDelegate(int x, int y);

    static int Add(int x, int y)
    {
        return x + y;
    }
    static int Subtract(int x, int y)
    {
        return x - y;
    }
    static int Multiply(int x, int y)
    {
        return x * y;
    }
    static int Divide(int x, int y)
    {
        return x / y;
    }

    CalcDelegate[] methods;

    public Mathmatics()
    {
        //static 메서드를 가리키는 델리게이트 배열 초기화
        methods = new CalcDelegate[] { Mathmatics.Add, Mathmatics.Subtract, Mathmatics.Multiply, Mathmatics.Divide };
    }

    //methods 배열에 담긴 델리게이트를 opCode 인자에 따라 호출
    public void Calculate(char opCode, int operand1, int operand2)
    {
        switch(opCode)
        {
            case '+':
                Console.WriteLine("+: " + methods[0](operand1, operand2));
                break;
            case '-':
                Console.WriteLine("-: " + methods[1](operand1, operand2));
                break;
            case '*':
                Console.WriteLine("*: " + methods[2](operand1, operand2));
                break;
            case '/':
                Console.WriteLine("/: " + methods[3](operand1, operand2));
                break;
        }
    }
}

namespace ConsoleApp1
{
    class Program
    {
        //3개의 매개변수를 받고 void를 반환하는 델리게이트 정의
        //매개변수의 타입이 중요할 뿐 매개변수의 이름은 임의로 정할 수 있음
        delegate void WorkDelegate(char arg1, int arg2, int arg3);

        static void Main(string[] args)
        {
            Mathmatics math = new Mathmatics();
            WorkDelegate work = math.Calculate;

            work('+', 10, 5);
            work('-', 10, 5);
            work('*', 10, 5);
            work('/', 10, 5);
        }
    }
}

델리게이트는 타입이다.

변수가 사용되는 곳이라면 델리게이트 또한 사용된다

즉, 메서드의 반환값으로 델리게이트를 사용할 수 있다

메서드의 인자로 델리게이트를 전달할 수 있다

클래스의 멤버로 델리게이트를 정의할 수 있다

 

델리게이트가 메서드를 가리키는 것임을 알면 이렇게 해석할 수 있다

메서드의 반환값으로 메서드를 사용할 수 있다

메서드의 인자로 메서드를 전달할 수 있다

클래스의 멤버로 메서드를 정의할 수 있다

'프로그래밍언어 > C#' 카테고리의 다른 글

07/24  (0) 2020.07.27
07/14 스마트팩토리 교육 - C# 복습  (0) 2020.07.14
07/13 스마트팩토리 교육 - C# 복습  (0) 2020.07.13
06/04 스마트팩토리 교육-  (0) 2020.06.04
06/03 스마트팩토리 교육 - 오버로드  (0) 2020.06.03