C#

C# Callback

용성 2022. 1. 28. 10:00
public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            switch (textBox1.Text)
            {
                case "1":
                    Task.Run(() => List1(List2));
                    break;

                case "2":
                    Task.Run(() => List1(List3));
                    break;

                case "3":
                    Task.Run(() => List1(List4));
                    break;
            }
        }

        public void List4()
        {
            listBox1.Items.Add("콜백이 시작된다.");
            label4.Text = "임용성";
            listBox1.Items.Add("===============.");
        }

        public void List3()
        {
            listBox1.Items.Add("콜백이 시작된다.");
            label3.Text = "김용성";
            listBox1.Items.Add("===============.");
            Thread.Sleep(1000);
        }

        public void List2()
        {
            listBox1.Items.Add("콜백이 시작된다.");
            label2.Text = "길용성";
            listBox1.Items.Add("===============.");
            Thread.Sleep(1000);
        }

        public void List1(Ddelegate dragon)
        {
            listBox1.Items.Add("콜백이 시작된다.");
            label1.Text = "나는";
            listBox1.Items.Add("===============.");

            Thread.Sleep(1000);

            Task.Run(() => dragon());
        }

- C# 은 JavaScript 와 다르게 매개변수에 타입을 지정해 줘야한다.

function d(dragon){
}


public void d(delegate dragon){
}

- 이러한 문제를 해결하기 위해 delegate라는 대리자를 사용하여 콜백을 구현하는 것 같다.

 

델리게이트 체인

delegate.combine()

- 받아오는 인자에 대한 타입이 같을 경우 combine으로 연결한 함수들이 한번에 모두 실행 가능하다.

728x90