07
24
using System;

class Program
{
    delegate int Calculator(int Num1, int Num2);

    static int Add(int iNum1, int iNum2)
    {
        return iNum1 + iNum2;
    }

    static int Sub(int iNum1, int iNum2)
    {
        return iNum1 - iNum2;
    }

    static int Mul(int iNum1, int iNum2)
    {
        return iNum1 * iNum2;
    }

    static int Div(int iNum1, int iNum2)
    {
        return iNum1 / iNum2;
    }

    static void Main(string[] args)
    {
        int iResult;

        iResult = Add(3, 4);
        Console.WriteLine(iResult);

        iResult = Sub(3, 4);
        Console.WriteLine(iResult);

        iResult = Mul(3, 4);
        Console.WriteLine(iResult);

        iResult = Div(3, 4);
        Console.WriteLine(iResult);
        Console.WriteLine();

        //
        Calculator[] aCalculator = new Calculator[] { Add, Sub, Mul, Div };

        for (int i = 0; i < aCalculator.Length; i++)
        {
            Console.WriteLine(aCalculator[i](3, 4));
        }
        Console.WriteLine();

        //

        foreach (Calculator calculator in aCalculator)
        {
            Console.WriteLine(calculator(3, 4));
        }
        Console.WriteLine();
        
        //
        Calculator c = Add;
        Console.WriteLine(c(3, 4));


    }
}

 

예제 실행 화면

 

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


class Program
{
    delegate int NewType(int Num); // 위임, 대리자
    
    static int OnePlus(int Num)
    {
        return Num + 1;
    }

    static int TenPlus(int Num)
    {
        return Num + 10;
    }

    static void Main(string[] args)
    {
        int TestNum = OnePlus(100);
        Console.WriteLine(TestNum);

        NewType newType = new NewType(OnePlus);
        TestNum = newType(1000);
        Console.WriteLine(TestNum);

        newType = new NewType(TenPlus);
        TestNum = newType(1000);
        Console.WriteLine(TestNum);
    }
}

 

예제 실행 화면

 

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


public class Mathematics
{
	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 Mathematics()
	{
		// static 메서드를 가리키는 델리게이트 배열 초기화
		methods = new CalcDelegate[] { Mathematics.Add, Mathematics.Subtract, Mathematics.Multiply, Mathematics.Divide };
	}

	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;
		}
	}
}

class Program
{

	delegate void WorkDelegate(char arg1, int arg2, int arg3);

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

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

 

예제 실행 화면

 

'스마트팩토리 > C#' 카테고리의 다른 글

26. 연산 범위 확인, 가변 매개변수, extern, unsafe  (0) 2020.07.27
25. MessageMap  (0) 2020.07.24
23. Indexer  (0) 2020.07.23
22. 복습  (0) 2020.07.20
21. 게임제작, 복습  (0) 2020.07.17
COMMENT