C#교과서 마스터하기 30. 이벤트(Event)
https://www.youtube.com/watch?v=C8xtvboY1gI&list=PLO56HZSjrPTB4NxAsEP8HRk6YKBDLbp7m&index=64
1. 이벤트(Event)
- 특정 사황이 발생할 때 개체 또는 클래스에서 알림을 제공할 수 있도록 하는 멤버
- 과속()
- 사고 이벤트 발생
- 운전()
- 연료 부족 이벤트 발생
2. 프로젝트
01. 기본 이벤트 핸들러
- Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
// 이벤트 게시자(Publisher)
class Car
{
private int _fuelGuage;
public int FulGuage
{
get { return _fuelGuage; }
set { _fuelGuage = value; }
}
public Car()
{
FulGuage = 25; // 25%
}
public void Go()
{
Console.WriteLine("운전");
FulGuage -= 5; // 5% 감소
}
public delegate void FuelEmputyNotification();
public event FuelEmputyNotification FuelEmptyReached; // 연료부족 이벤트
public void OnFuelEmptyReached()
{
if(FuelEmptyReached != null)
{
// FuelEmptyReached();
FuelEmptyReached?.Invoke();
}
}
}
}
- Program.cs
using System;
using static System.Console;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace testProject
{
// 이벤트 구독자(Subscriber)
class Program
{
static void Main(string[] args)
{
Car.Car car = new Car.Car();
car.FuelEmptyReached += Car_FuelEmptyReached; // += tab
car.FuelEmptyReached -= Car_FuelEmptyReached; // 등록 취소
// car.FuelEmptyReached += delegate () => { }; // 익명 함수
car.FuelEmptyReached += () => { // 람다 식
Console.ForegroundColor = ConsoleColor.Red;
Console.BackgroundColor = ConsoleColor.Black;
WriteLine("연료부족");
Console.ResetColor();
};
car.Go();
car.OnFuelEmptyReached();
}
// 이벤트 핸들러(Evnet Handler)
private static void Car_FuelEmptyReached() =>
WriteLine("연료 부족");
}
}
- 과속()
- 사고 이벤트 발생
- 운전()
- 연료 부족 이벤트 발생
01. 기본 이벤트 핸들러
- Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
// 이벤트 게시자(Publisher)
class Car
{
private int _fuelGuage;
public int FulGuage
{
get { return _fuelGuage; }
set { _fuelGuage = value; }
}
public Car()
{
FulGuage = 25; // 25%
}
public void Go()
{
Console.WriteLine("운전");
FulGuage -= 5; // 5% 감소
}
public delegate void FuelEmputyNotification();
public event FuelEmputyNotification FuelEmptyReached; // 연료부족 이벤트
public void OnFuelEmptyReached()
{
if(FuelEmptyReached != null)
{
// FuelEmptyReached();
FuelEmptyReached?.Invoke();
}
}
}
}
- Program.cs
using System;
using static System.Console;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace testProject
{
// 이벤트 구독자(Subscriber)
class Program
{
static void Main(string[] args)
{
Car.Car car = new Car.Car();
car.FuelEmptyReached += Car_FuelEmptyReached; // += tab
car.FuelEmptyReached -= Car_FuelEmptyReached; // 등록 취소
// car.FuelEmptyReached += delegate () => { }; // 익명 함수
car.FuelEmptyReached += () => { // 람다 식
Console.ForegroundColor = ConsoleColor.Red;
Console.BackgroundColor = ConsoleColor.Black;
WriteLine("연료부족");
Console.ResetColor();
};
car.Go();
car.OnFuelEmptyReached();
}
// 이벤트 핸들러(Evnet Handler)
private static void Car_FuelEmptyReached() =>
WriteLine("연료 부족");
}
}
02. 이벤트 핸들러를 내부 코드에서 실행
- Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
// 이벤트 게시자(Publisher)
class Car
{
private int _fuelGuage;
public int FulGuage
{
get { return _fuelGuage; }
set
{
_fuelGuage = value;
OnFuelEmptyReached();
}
}
public Car()
{
_fuelGuage = 25; // 25%
}
public void Go()
{
Console.WriteLine("운전");
FulGuage -= 5; // 5% 감소
}
public delegate void FuelEmputyNotification();
public event FuelEmputyNotification FuelEmptyReached; // 연료부족 이벤트
public void OnFuelEmptyReached()
{
Console.WriteLine($"연료 상태 : {_fuelGuage}%");
if(_fuelGuage < 20)
{
if (FuelEmptyReached != null)
{
// FuelEmptyReached();
FuelEmptyReached?.Invoke();
}
}
}
}
}
- Program.cs
using System;
using static System.Console;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace testProject
{
// 이벤트 구독자(Subscriber)
class Program
{
static void Main(string[] args)
{
Car.Car car = new Car.Car();
car.FuelEmptyReached += Car_FuelEmptyReached; // += tab
car.FuelEmptyReached -= Car_FuelEmptyReached; // 등록 취소
// car.FuelEmptyReached += delegate () => { }; // 익명 함수
car.FuelEmptyReached += () => { // 람다 식
Console.ForegroundColor = ConsoleColor.Red;
Console.BackgroundColor = ConsoleColor.Black;
WriteLine("연료부족");
Console.ResetColor();
};
car.Go();
// car.OnFuelEmptyReached();
car.Go();
}
// 이벤트 핸들러(Evnet Handler)
private static void Car_FuelEmptyReached() =>
WriteLine("연료 부족");
}
}
03. 대리자 간소화
- Car.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
// 이벤트 게시자(Publisher)
class Car
{
private int _fuelGuage;
public int FulGuage
{
get { return _fuelGuage; }
set
{
_fuelGuage = value;
OnFuelEmptyReached();
}
}
public Car()
{
_fuelGuage = 25; // 25%
}
public void Go()
{
Console.WriteLine("운전");
FulGuage -= 5; // 5% 감소
}
// 대리자
// public delegate void FuelEmputyNotification();
// public event FuelEmputyNotification FuelEmptyReached; // 연료부족 이벤트
public event Action FuelEmptyReached; // 위 대리자와 동일한 기능
public void OnFuelEmptyReached()
{
Console.WriteLine($"연료 상태 : {_fuelGuage}%");
if(_fuelGuage < 20)
{
if (FuelEmptyReached != null)
{
// FuelEmptyReached();
FuelEmptyReached?.Invoke();
}
}
}
}
}
- Program.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
// 이벤트 게시자(Publisher)
class Car
{
private int _fuelGuage;
public int FulGuage
{
get { return _fuelGuage; }
set
{
_fuelGuage = value;
OnFuelEmptyReached();
}
}
public Car()
{
_fuelGuage = 25; // 25%
}
public void Go()
{
Console.WriteLine("운전");
FulGuage -= 5; // 5% 감소
}
// 대리자
// public delegate void FuelEmputyNotification();
// public event FuelEmputyNotification FuelEmptyReached; // 연료부족 이벤트
public event Action FuelEmptyReached; // 위 대리자와 동일한 기능
public void OnFuelEmptyReached()
{
Console.WriteLine($"연료 상태 : {_fuelGuage}%");
if(_fuelGuage < 20)
{
if (FuelEmptyReached != null)
{
// FuelEmptyReached();
FuelEmptyReached?.Invoke();
}
}
}
}
}
Author And Source
이 문제에 관하여(C#교과서 마스터하기 30. 이벤트(Event)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ansalstmd/C교과서-마스터하기-30.-이벤트Event저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)