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