근거를 표현

대리자는 메서드에 대한 참조를 나타내는 형식입니다.

대리자의 인스턴스를 통해 메서드를 호출할 수 있습니다.

  • “대표하다”. 대신 처리한다는 의미입니다.
  • 대리자를 사용하여 다른 메서드를 호출할 수 있습니다.
  • 호출되는 메서드의 반환 유형은 매개변수의 수 및 데이터 유형과 일치해야 합니다.
  • 하나의 대리자 호출에서 여러 메서드를 호출할 수 있습니다.
  • 이벤트 처리기, 스레딩 등에 사용됩니다.

다음은 대리자 선언의 예입니다.

사람들 대표하다 int Calc(int a, int b);

대리자 선언은 호출되는 메서드의 반환 값 및 매개 변수와 일치해야 합니다.

공공 int 플러스(int a, int b)
{
a+b를 반환합니다.

}
Cal c = 더하기 기호; // 델리게이트 인스턴스 선언
c(10, 20); // 추가하다 메서드 호출

대리자를 사용하여 다른 메서드를 호출하는 간단한 예를 들어 보겠습니다.

쉬운 목차

예 1

1. 프로젝트를 생성합니다.

  • Windows Forms 애플리케이션(.NET 프레임워크)

2. 양식에 목록 상자와 버튼을 추가합니다.

3. 버튼에 다음 코드를 작성합니다.

using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.Data;
//using System.Drawing;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;

namespace Delegate_1
{
    public partial class Form1 : Form
    {
        delegate void MyCalc(int a, int b);

        public Form1()
        {
            InitializeComponent();
        }

        private void Plus(int a, int b)
        {
            listBox1.Items.Add(String.Format($"{a} + {b} = {a + b}"));
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MyCalc md = Plus;
            md(20, 10);
        }
    }
}


대리자를 사용하여 메서드 호출

대리자는 여러 메서드를 하나로 결합하여 단일 호출에서 여러 메서드를 실행할 수 있습니다.

예 2

1. 위에서 만든 프로젝트에 버튼(button2)을 추가하고 코드를 추가합니다.

2. 완성된 코드는 다음과 같습니다.

using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.Data;
//using System.Drawing;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Delegate_1
{
    public partial class Form1 : Form
    {
        delegate void MyCalc(int a, int b);

        public Form1()
        {
            InitializeComponent();
        }

        private void Plus(int a, int b)
        {
            listBox1.Items.Add(String.Format($"{a} + {b} = {a + b}"));
        }
        private void Minus(int a, int b)
        {
            listBox1.Items.Add(String.Format($"{a} - {b} = {a - b}"));
        }
        private void Division(int a, int b)
        {
            listBox1.Items.Add(String.Format($"{a} * {b} = {a * b}"));
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyCalc md = Plus;
            md(20, 10);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MyCalc md = Plus;
            md(20, 10);

            md = Minus;
            md(20, 10);

            md = (MyCalc)Delegate.Combine(
                   new MyCalc(Plus),
                   new MyCalc(Minus),
                   new MyCalc(Division));
            md(20, 10);
        }
    }
}


대리자를 사용하여 여러 메서드 호출