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