IT/C#

[C#_기본] 델리게이트(Delegate)

배당 줍는 다람쥐 2021. 9. 30. 10:49
반응형

델리게이트

  • 대리자
  • 메소드의 틀을 만들어 소통
  • 클래스간 통신에 활용
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    /*-----------------------------------------------------------------------------
    * Name: _delegate
    * DESC: delegate 기초
    -----------------------------------------------------------------------------*/
    namespace _delegate
    {
    delegate int DelegateFunc(int a);
    class Program
    {
    static int Add(int a) {
    Console.WriteLine("Add");
    return a + a;
    }
    static void Main(string[] args) {
    DelegateFunc delegateFunc = Add; //delegateFunc(Add)
    Console.WriteLine("delegateFunc: " + delegateFunc(10));
    }
    }
    }

델리게이트 선언 방법

  • 기본 선언
  • 간략한 선언
  • 익명 함수 선언
  • 람다식 선언
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*-----------------------------------------------------------------------------
* Name: _delegateDeclare
* DESC: delegate 선언 방법
-----------------------------------------------------------------------------*/
namespace _delegateDeclare
{
delegate void DelegateTest(int a, int b);
// 1, 2번은 미리 함수를 선언해서 사용하는 방법
// 3, 4번은 바로 함수를 작성해서 사용하는 방법
class Program
{
static void Sum(int a, int b) {
Console.WriteLine("a + b = " + (a + b));
}
static void Main(string[] args) {
//1: 기본 선언
DelegateTest dt = new DelegateTest(Sum);
//2: 간략한 선언
DelegateTest dt2 = Sum;
//3: 익명 함수 선언
DelegateTest dt3 = delegate (int a, int b) {
Console.WriteLine("a + b = " + (a + b));
};
//4: 람다식 선언
DelegateTest dt4 = (a, b) => {
Console.WriteLine("a + b = " + (a + b));
};
dt(1, 1);
dt2(2, 2);
dt3(3, 3);
dt4(4, 4);
dt = delegate (int a, int b)
{
Console.WriteLine("a - b = " + (a - b));
};
dt(2, 1);
}
}
}

델리게이트 함수 파라미터 활용

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*-----------------------------------------------------------------------------
* Name: _delegateParam
* DESC: delegate 파라미터
-----------------------------------------------------------------------------*/
namespace _delegateParam
{
delegate void delegateFunc();
class MessageProcess
{
delegateFunc CallOkFunc;
delegateFunc CallCancelFunc;
public void Message(string msg, delegateFunc okFunc, delegateFunc cancelFunc) {
CallOkFunc = okFunc;
CallCancelFunc = cancelFunc;
Console.WriteLine("Message: " + msg + " (0: ok, 1: cancel)");
string inputStr = Console.ReadLine();
if(inputStr.Equals("0")) {
CallOkFunc();
}
else {
CallCancelFunc();
}
}
}
class Program
{
static void CallOK() {
Console.WriteLine("CallOK");
}
static void CallCancel() {
Console.WriteLine("CallCancel");
}
static void Main(string[] args) {
MessageProcess msg = new MessageProcess();
// 1. 일반적인 사용 방법
//msg.Message("Test Message", CallOK, CallCancel);
// 2. 내부에 익명 함수로 사용하는 방법도 존재
msg.Message("Test Message",
delegate ()
{
Console.WriteLine("Call InDelegate");
}
,CallCancel);
}
}
}
반응형

'IT > C#' 카테고리의 다른 글

[C#_List] Find 검색  (0) 2021.10.01
[C#_기본] 람다식 - Lambda Expression  (0) 2021.10.01
[C#_클래스] this, static 키워드  (0) 2021.09.28
[C#_클래스] 개념과 생성자, 소멸자  (0) 2021.09.28
[C#_기본] 접근제한자  (0) 2021.09.28