멀티캐스트 대리자


함수 실행1

using System;

namespace delegate_test3
{
    class Program
    {
        static void Main(string[] args)
        {
            Program program = new Program();

            program.run("실행1");
            program.SomethingHappend("실행2");
            program.MyAreaClick("실행3");
            program.AfterClick("실행4");
        }

        void run(string sender)
        {
            Console.WriteLine(sender + " run 클릭!");
        }

        void SomethingHappend(string sender)
        {
            Console.WriteLine(sender + " SomethingHappend 클릭!");
        }

        void MyAreaClick(string sender)
        {
            Console.WriteLine(sender + " MyArea 클릭!");
        }

        void AfterClick(string sender)
        {
            Console.WriteLine(sender + " AfterClick 클릭!");
        }
    }
}

함수실행1 - 대리자 멀티캐스트

함수가 대리자와 동일한 형태의 시그니처를 가진다면, 여러 함수를 대리자 변수 1개에 묶을 수 있다.

대리자로 묶어놓은 함수들은, 대리자의 실행으로 여러 함수 실행이 가능하다.

using System;

namespace delegate_test3
{
    delegate void Del(string sender);

    class Program
    {

        static void Main(string[] args)
        {
            Program program = new Program();

            // 대리자 묶음
            Del Multi_Delegate = new Del(program.run);
            Multi_Delegate += program.SomethingHappend;
            Multi_Delegate += program.MyAreaClick;
            Multi_Delegate += program.AfterClick;

            // 대리자 실행
            Multi_Delegate("대리자");
        }
        void run(string sender)
        {
            Console.WriteLine(sender + " run 클릭!");
        }

        void SomethingHappend(string sender)
        {
            Console.WriteLine(sender + " SomethingHappend 클릭!");
        }

        void MyAreaClick(string sender)
        {
            Console.WriteLine(sender + " MyArea 클릭!");
        }

        void AfterClick(string sender)
        {
            Console.WriteLine(sender + " AfterClick 클릭!");
        }
    }
}

 

 

 

함수 실행2

using System;

namespace delegate_test3
{
    class Buttons
    {
        private string title;
        public Buttons(string name)
        {
            this.title = name;
        }

        public void run(string run_msg)
        {
            Console.WriteLine(title + run_msg + " 실행!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Buttons Button1 = new Buttons("버튼1");
            Buttons Button2 = new Buttons("버튼2");
            Buttons Button3 = new Buttons("버튼3");
            Buttons Button4 = new Buttons("버튼4");

            Button1.run(" run");
            Button2.run(" SomethingHappend");
            Button3.run(" MyArea");
            Button4.run(" AfterClick");
        }
    }
}

 

using System;

namespace delegate_test3
{
    delegate void Btn(string sender);

    class Buttons
    {
        private string title;
        public Buttons(string name)
        {
            this.title = name;
        }

        public void run(string run_msg)
        {
            Console.WriteLine(title + run_msg + " 실행!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Buttons Button1 = new Buttons("버튼1");
            Buttons Button2 = new Buttons("버튼2");
            Buttons Button3 = new Buttons("버튼3");
            Buttons Button4 = new Buttons("버튼4");

            Btn click = new Btn(Button1.run);

            click += Button2.run;
            click += Button3.run;
            click += Button4.run;

            // 대리자 click 만 실행하면,
            // Button1, Button2, Button3, Button4 의 run 을 모두 동작하게 한다.
            click("클릭");
        }
    }
}