성장일기
07/23 C#복습 - 델리게이트 본문
(Add와 Div의 변수이름이 같아도 되지만 임의로 3,4로 설정했음)
메소드를 가리키는 타입 : delegate
델리게이트를 쓰면 반복문도 만들 수 있다
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 |