댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
|
C#
2013.08.08 08:52
사용자 정의 이벤트(event) 예제
조회 수 29072 댓글 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