https://www.youtube.com/watch?v=C8xtvboY1gI&list=PLO56HZSjrPTB4NxAsEP8HRk6YKBDLbp7m&index=64
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();
            }
        }
    }
}
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("연료 부족");
    }
}

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();
                }
            }
            
        }
    }
}
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("연료 부족");
    }
}


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();
                }
            }
            
        }
    }
}
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();
                }
            }
            
        }
    }
}

