7 Şubat 2018

C# Delegates Örnek

using System;

namespace DelegateDemo
{
    public enum CallState
    {
        Ringing,
        Answered,
        Parked,
        Closed
    }
    public class CallArgs
    {
        public DateTime Time => DateTime.Now;
        public CallState State { get; set; }
        public string PhoneNumber { get; set; }
        public CallArgs(CallState state, string phoneNumber)
        {
            State = state;
            PhoneNumber = phoneNumber;
        }
    }

    public delegate void CallStateHandler(object sender, CallArgs args);

    public class Line
    {
        public string PhoneNumber { get; set; }

        public event CallStateHandler LineStateChanged;
        private CallState state;
        public CallState State {
            get {
                return state;
            }
            set {
                state = value;
                if (LineStateChanged != null)
                    LineStateChanged(this, new CallArgs(value, PhoneNumber));
            }
        }

        public Line(string phoneNumber, CallState state)
        {
            LineStateChanged += CallStateChanged;
            PhoneNumber = phoneNumber;
            State = state;
                              
        }

        private void CallStateChanged(object sender, CallArgs args)
        {
            if (args.State == CallState.Ringing)
                Console.WriteLine($"{args.Time} => {args.PhoneNumber} hat çalıyor ");
            else if (args.State == CallState.Answered)
                Console.WriteLine($"{args.Time} => {args.PhoneNumber} hat açıldı ");
            else if (args.State == CallState.Parked)
                Console.WriteLine($"{args.Time} => {args.PhoneNumber} hat beklemede ");
            else if (args.State == CallState.Closed)
            {
                PhoneNumber = string.Empty;
                Console.WriteLine($"{args.Time} => hat kapalı");

            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {            
            var line = new Line("00000000", CallState.Ringing);
            line.State = CallState.Answered;
            line.State = CallState.Parked;
            line.State = CallState.Closed;
            Console.WriteLine(line.PhoneNumber);
        }
    }
}