자바 입문
[c# delegate && eventHandler]
javaman
2022. 8. 31. 00:32
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!");
}
}
}