본문 바로가기
자바 입문

[c# delegate && eventHandler]

by javaman 2022. 8. 31.

c# delegate 

@@ Delegate대리자 @@는 동일한 파라미터 형식과 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다
@@ Action<T> @@ 는 파라미터 1개에 void 타입을 가진 함수에 사용되는 delegate 이다

 

c# eventHandler

@@ 이벤트 @@는 클래스 내에서 event가 발생했을때 event 가입자들(구독자들)에게 event가 일어났음을 알려주는 기능
이벤트 가입자입장에서 event가 발생했을때 어떻게 해야 할지 처리하는 도구가 @@ EventHandler @@이고,

+= 연산을 통해 이벤트(event)에 이벤트 핸들러(eventHandler)를 추가

 

 

using System;

namespace Temp
{
    //@@ 이벤트 @@는 클래스 내에서 event가 발생했을때 event가입자들(구독자들)에게 event가 일어났음을 알려주는 기능

    //이벤트 가입자입장에서 event가 발생했을때 어떻게 해야 할지 처리하는 도구가 @@ EventHandler @@이고,
    //+= 연산을 통해 이벤트(event)에 이벤트 핸들러(eventHandler)를 추가
    class Program
    {
        class Button
        {
            public event EventHandler Click;
            EventArgs arg = new EventArgs();
            public void OnButtonClicked()
            {
                if (Click != null)
                    //이벤트 핸들러 호출
                    Click.Invoke(this, arg);
            }

            
        }

        //@@ Delegate대리자 @@는 동일한 파라미터 형식과 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다
        //@@ Action<T> @@ 는 파라미터 1개에 void 타입을 가진 함수에 사용되는 delegate 이다
        class MyClass
        {
            public delegate void Run(int i);

            public void runThis(int i)
            {
                Console.WriteLine(i);
            }
            public void runThat(int i)
            {
                Console.WriteLine(i);

            }
            public void perform()
            {
                //1. delegate인스턴스 생성
                Run run = new Run(runThis);
                //2. delegate 실행
                run(1024);
                //Run run2 = new Run(runThat)을 줄여서
                //아래와 같이 쓸 수 있다
                run = runThat;
                run(1024);
            }


        }
        static void Main(string[] args)
        {

            
            Button btn = new Button();
            //Click 이벤트에 대한 이벤트 핸들러로
            //OnButtonEventHandler 메서드를 지정함
            btn.Click += new EventHandler(OnButtonEventHandler);

            btn.OnButtonClicked();
        }
        static void OnButtonEventHandler(object sender, EventArgs arg)
        {
            Console.WriteLine("clicked!");
        }

    }
}