ㅎㅎ,, 델리게이트 Delegate 사전적으로는 '대리자'라는 뜻이래요.
델리하면 나는 '델리만쥬'밖에 모르는데 ㅋㅋㅋㅋ
이참에 Delegate 델리게이트 한번 배워봅니다.
프로그래밍에서의 Delegate는 메소드를 직접 호출하지 않고,
델리게이트라는 대리자메소드를 이용해서 지정 메소드를 대신 호출 해주는 기능을 말합니다.
그럼 1번째로 Delegate를 선언하고 사용하는 방법에 대해서 알아보아요!!!
<Delegate 선언>
delegate 데이터형 이름(인수목록)
//예시는 아래와 같다.
delegate int TypeF(int a, int b)
<Delegate 사용>
TypeF delegateValue = new TypeF(Plus);
2번째 델리게이트의 원리를 소스를 보면서 살펴보기
<Delegate 원리>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Delegate
{
internal class Program
{
// 대리자 델리게이트 반환값은 int 델리게이트명은 CalcDelegate 인자는 int x, int y 를 받는다.
delegate int CalcDelegate(int x, int y);
// Plus(인자는 델리게이트와 같고, 반환값도 int데이터형인 메소드 선언 +구현
// 아래의 Minus 메소드 또한 선언 +구현
static int Plus(int x,int y) { return x + y; }
static int Minus(int x, int y) { return x - y; }
static void Main(string[] args)
{
// dell이라는 객체를 생성할 때 델리게이트 대리자를 통해서 Plus라는 메소드를 호출하게됩니다.
CalcDelegate dell = new CalcDelegate(Plus);
//int 데이터형으로 반환되는 result라는 변수에 결국은 dell이지만, Plus(20,10); 이 호출되고
// 20+10 =30이 나옵니다.
int result = dell(20, 10);
Console.WriteLine(result); //30
//요기서는 dell2라는 객체를 생성해서 Munus라는 메소드를 호출하며
// result라는 변수는 위에서 이미 int형 반환 타입으로 정의되어있으니 그대로 새로운 Munus(20,10); 을 dell2가 대신 호출
// 20-10 = 10이 결과값에 저장되고 출력 시
CalcDelegate dell2 = new CalcDelegate(Minus);
result = dell2(20, 10);
Console.WriteLine(result); //10 이 나옵니다.
}
}
}
++ 이와 같은 구조이며, 다양한 방식으로도 쓰일 수 가 있습니다.
CalcDelegate del = Plus;
int result = del(20,10);
Console.WriteLine(result);
del=Minus;
result = del(20,10);
Console.WriteLine(result);
//델리게이트는 결국은 데이터형 타입인 것이기에 이렇게도 쓰일 수가 있습니다.
<Multi Delegate>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MultiDelegate
{
internal class Program
{
delegate void CalcDelegate(int x, int y);
static void Plus(int x, int y) { Console.WriteLine(x + y); }
static void Minus(int x, int y) { Console.WriteLine(x - y); }
static void Multiple(int x, int y) { Console.WriteLine(x * y); }
static void Divide(int x, int y) { Console.WriteLine(x / y); }
static void Main(string[] args)
{
CalcDelegate del1 = Plus;
CalcDelegate del2 = Minus;
CalcDelegate del3 = Multiple;
CalcDelegate del4 = Divide;
del1 += del2;
del1 += del3;
del1 += del4;
del1(20, 10);
del1 -= del3;
del1 -= del4;
del1(20, 10);
}
}
}
모르는 건 물어봐주세요.
답변하기 위해서라도 공부해서 답변해드릴게요..
Bye bye
[C#] String 클래스 + 문자열 관리 메소드 표 제공 (0) | 2024.10.27 |
---|---|
[C#] 이벤트 (0) | 2024.10.27 |
[C#] 콜백 메소드 Callback _반대호출 _ 이벤트로 인한 호출 (1) | 2024.10.27 |
[C#] Interface에 대해서 (0) | 2024.10.27 |
[C#]NuGet패키지관리 Barcodelib설치해서 바코드 이미지 불러오기 만들어보기 _참조(FoxLearn) (2) | 2024.10.27 |