델리게이트와 비슷하다고, 또는 같다고 보셔도 무방합니다.
다음의 예제는 Head First C#에서 빌려왔습니다.
델리게이트를 먼저 공부하신 후, 녹색으로 색칠한 부분을 눈여겨 보시면 이해가 빠를 것이라 생각됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 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); } } |
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5