C#의 delegate는 메서드를 참조하는 객체로 C/C++의 함수포인터와 비슷한 개념이다. C#의 메서드포인터라고 보면 된다. 이 Delegate는 이벤트 핸들러나 콜백 함수를 구현하거나, 대리자 메서드를 호출하는 등 용도로 사용할 수 있다.
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.Perform();
}
}
class MyClass
{
// 1. delegate 선언
private delegate void printInt2Consol(int i);
public void Perform()
{
// 2. delegate 인스턴스 생성. delegate 인스턴스를 생성할 때는 반드시 호출될 메서드를 전달해줘야 한다.
printInt2Consol printNum = new printInt2Consol(toDecimal);
printNum(100);
// 또는 printNum = toHexaDecimal
printNum = new printInt2Consol(toHexaDecimal); ;
printNum(100);
}
private void toDecimal(int val)
{
Console.WriteLine("{0}", val);
}
private void toHexaDecimal(int value)
{
Console.WriteLine("{0:X}", value);
}
}
}
delegate를 파라미터로 받는 예시
using System;
namespace ConsoleApp2
{
class Program
{
public static int Add(int a, int b)
{
return a + b;
}
public static int Subtract(int a, int b)
{
return a - b;
}
static void Main(string[] args)
{
int a = 5, b = 3;
int result1 = Calculator.Calculate(a, b, new Calculator.Operation(Add));
Console.WriteLine("Addition: {0}", result1);
int result2 = Calculator.Calculate(a, b, new Calculator.Operation(Subtract));
Console.WriteLine("Subtraction: {0}", result2);
}
}
// 계산 위한 클래스
public class Calculator
{
// 반환형이 int고, int 두 개를 파라미터로 받는 델리게이트 선언
public delegate int Operation(int a, int b);
// 델리게이트를 매개변수로 받는 메서드
public static int Calculate(int a, int b, Operation operation)
{
return operation(a, b);
}
}
}
delegate는 += 연산자를 사용하여 다른 메서드를 추가하거나, -= 연산자를 사용하여 등록된 메서드를 삭제할 수 있다. 이렇게 Delegate를 조작하는 것은 주로 이벤트와 함께 사용된다.
public delegate void MyDelegate(string arg1);
public event MyDelegate MyEvent;
// 메서드 추가
MyEvent += new MyDelegate(MyEventHandler);
MyEvent += new MyDelegate(MyEventHandler2);
// MyEventHandler와 MyEventHandler2의 구현..
// 메서드 삭제
MyEvent -= new MyDelegate(MyEventHandler2);
// 모든 메서드 삭제
MyEvent = null;
'프로그래밍 > C# (WinForms)' 카테고리의 다른 글
C#, WinForms ] CRC Checker (0) | 2023.05.14 |
---|---|
C#, WinForms ] Drag & Drop 으로 파일 경로 얻기 (2) | 2023.05.14 |
C#, WinForms ] 폼 시작시, 종료시 이벤트 호출 순서 (0) | 2023.05.14 |
C#, WinForms ] program.cs C# 프로그램 진입점 (0) | 2023.05.14 |
Winforms ] ToopStrip, MenuStrip 속성 (0) | 2023.05.14 |