C#/수업 내용
Event와 delegate
Game Client Lee Hwanguk
2023. 2. 24. 17:59
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
//Event (delegate)
namespace LearnEvent
{
class Notifier
{
public class MessageEventArgs : EventArgs //EventArgs상속
{
public int UserId { get; set; }
public string Message { get; set; }
public string Time { get; set; }
}
public event EventHandler<MessageEventArgs> messageEventHandler; //이벤트 변수
public void Init()
{
//메세지가 오면 이벤트를 발생시킴
for(int i=0; i<1000; i++) {
Thread.Sleep(1000); //m/sec 단위
//이벤트 발생
var userId = 100; //누가?
var message = "hellow world"; //무엇을?
var time=DateTime.Now.ToString("yyyy-MM-dd HH-mm:ss"); //언제?
//개체 이니셜라이즈
var args=new MessageEventArgs() {
UserId=userId,
Message = message,
Time=time
};
this.messageEventHandler(this, args);
}
}
}
internal class Program
{
static void Main(string[] args)
{
new Program();
}
//생성자
public Program() {
Notifier notifier= new Notifier();
//구독(program이 notifier의 상태를)
notifier.messageEventHandler += this.MessageEventHandler;
notifier.Init();
}
//sender:이벤트를 발생한 객체 e:이벤트 발생시 전달된 인자 객체
private void MessageEventHandler(object sender, Notifier.MessageEventArgs e)
{
//var args=(Notifier.MessageEventArgs)e;
Console.WriteLine("sender:{0}",sender);
Console.WriteLine("e.UserId:{0},e.Message:{1},e.Time:{2}",e.UserId,e.Message,e.Time);
}
}
}