댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
C#
2013.08.08 08:52
사용자 정의 이벤트(event) 예제
조회 수 13789 댓글 0
델리게이트와 비슷하다고, 또는 같다고 보셔도 무방합니다.
다음의 예제는 Head First C#에서 빌려왔습니다. 델리게이트를 먼저 공부하신 후, 녹색으로 색칠한 부분을 눈여겨 보시면 이해가 빠를 것이라 생각됩니다.
public class Ball { public event EventHandler BallInPlay; public void OnBallInPlay(BallEventArgs e) { if (BallInPlay != null) { BallInPlay(this, e); // 델리게이트와 동작하는 방식은 거의 같습니다. } } } public class BallEventArgs : EventArgs { public int Trajectory { get; private set; } public int Distance { get; private set; } public BallEventArgs(int Trajectory, int Distance) { this.Trajectory = Trajectory; this.Distance = Distance; } } public class Fan { public Fan(Ball ball) { ball.BallInPlay += new EventHandler(ball_BallInPlay); } public void ball_BallInPlay(object sender, EventArgs e) { if (e is BallEventArgs) { BallEventArgs ballEventArgs = e as BallEventArgs; if (ballEventArgs.Distance > 400 && ballEventArgs.Trajectory > 30) { Console.WriteLine("Fan: Home Run! I'm going for the ball!"); } else { Console.WriteLine("Fan: Woo-hoo! Yeah!"); } } } } public class Pitcher { public Pitcher(Ball ball) { ball.BallInPlay += new EventHandler(ball_BallInPlay); } void ball_BallInPlay(object sender, EventArgs e) { if (e is BallEventArgs) { BallEventArgs ballEventArgs = e as BallEventArgs; if (ballEventArgs.Distance < 95 && ballEventArgs.Trajectory < 60) { CatchBall(); } else { CorverFirstBase(); } } } private void CatchBall() { Console.WriteLine("Pitcher: I caught the ball!"); } private void CorverFirstBase() { Console.WriteLine("Pitcher: I corvered first base."); } } class Program { static void Main(string[] args) { Ball ball = new Ball(); Pitcher pitcher = new Pitcher(ball); Fan fan = new Fan(ball); BallEventArgs ballEventArgs = new BallEventArgs(100, 40); ball.OnBallInPlay(ballEventArgs); } } Dreamy의 코드 스크랩내가 모으고 내가 보는
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5