constk

Делегаты и события, задание 2, черновик

Nov 14th, 2021
823
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2.  
  3. namespace Task2
  4. {
  5.     class Person
  6.     {
  7.         public string Name { get; }
  8.  
  9.         public Person(string name)
  10.         {
  11.             if (string.IsNullOrEmpty(name))
  12.                 throw new ArgumentException("Имя не может быть пустым или null!");
  13.  
  14.             Name = name;
  15.         }
  16.  
  17.         public void SayHiTo(object sender, OfficeEventArgs e)
  18.         {
  19.             string name = e.Name;
  20.             DateTime timeOfDay = e.Time;
  21.  
  22.             if (timeOfDay.Hour < 12)
  23.                 Console.WriteLine($"'Доброе утро, {name}!', — сказал {Name}");
  24.             else if (timeOfDay.Hour < 17)
  25.                 Console.WriteLine($"'Добрый день, {name}!', — сказал {Name}");
  26.             else
  27.                 Console.WriteLine($"'Добрый вечер, {name}!', — сказал {Name}");
  28.         }
  29.  
  30.         public void SayByeTo(object sender, OfficeEventArgs e)
  31.         {
  32.             Console.WriteLine($"'До свидания, {e.Name}!', — сказал {Name}");
  33.         }
  34.     }
  35.  
  36.     class Office
  37.     {
  38.         public delegate void OfficeHanler(object sender, OfficeEventArgs e);
  39.  
  40.         public event OfficeHanler PersonCame;
  41.         public event OfficeHanler PersonLeft;
  42.  
  43.         protected virtual void OnPersonCame(object sender, OfficeEventArgs e)
  44.         {
  45.             OfficeHanler handler = PersonCame;
  46.             handler?.Invoke(this, e);
  47.         }
  48.  
  49.         protected virtual void OnPersonLeft(object sender, OfficeEventArgs e)
  50.         {
  51.             OfficeHanler handler = PersonLeft;
  52.             handler?.Invoke(this, e);
  53.         }
  54.  
  55.         public void Come(Person person)
  56.         {
  57.             Console.WriteLine();
  58.             Console.WriteLine($"[В оффис пришёл {person.Name}.]");
  59.  
  60.             OnPersonCame(this, new OfficeEventArgs(person.Name, DateTime.Now));
  61.             PersonCame += person.SayHiTo;
  62.             PersonLeft += person.SayByeTo;
  63.         }
  64.  
  65.         public void Leave(Person person)
  66.         {
  67.             Console.WriteLine();
  68.             Console.WriteLine($"[{person.Name} ушёл домой.]");
  69.  
  70.             PersonCame -= person.SayHiTo;
  71.             PersonLeft -= person.SayByeTo;
  72.             OnPersonLeft(this, new OfficeEventArgs(person.Name, DateTime.Now));
  73.         }
  74.  
  75.         public void Come(Person person, DateTime timeOfDay)
  76.         {
  77.             Console.WriteLine();
  78.             Console.WriteLine($"[В оффис пришёл {person.Name}.]");
  79.  
  80.             OnPersonCame(this, new OfficeEventArgs(person.Name, timeOfDay));
  81.             PersonCame += person.SayHiTo;
  82.             PersonLeft += person.SayByeTo;
  83.         }
  84.  
  85.         public void Leave(Person person, DateTime timeOfDay)
  86.         {
  87.             Console.WriteLine();
  88.             Console.WriteLine($"[{person.Name} ушёл домой.]");
  89.  
  90.             PersonCame -= person.SayHiTo;
  91.             PersonLeft -= person.SayByeTo;
  92.             OnPersonLeft(this, new OfficeEventArgs(person.Name, timeOfDay));
  93.         }
  94.     }
  95.  
  96.     class OfficeEventArgs : EventArgs
  97.     {
  98.         public string Name { get; }
  99.  
  100.         public DateTime Time { get; }
  101.  
  102.         public OfficeEventArgs(string name)
  103.         {
  104.             Name = name;
  105.             Time = DateTime.Now;
  106.         }
  107.  
  108.         public OfficeEventArgs(string name, DateTime time)
  109.         {
  110.             Name = name;
  111.             Time = time;
  112.         }
  113.     }
  114.  
  115.     class Program
  116.     {
  117.         static void Main(string[] args)
  118.         {
  119.             Person person1 = new Person("Света");
  120.             Person person2 = new Person("Лена");
  121.             Person person3 = new Person("Вика");
  122.             Person person4 = new Person("Вероника");
  123.             Person person5 = new Person("Виктор Марьянович");
  124.             Person person6 = new Person("дядя Боб");
  125.             Person person7 = new Person("дядя Линус");
  126.  
  127.             Office office = new Office();
  128.  
  129.             office.Come(person6, new DateTime( 2021, 11, 14, 6, 0, 0 ));
  130.             office.Come(person7, new DateTime(2021, 11, 14, 7, 0, 0));
  131.  
  132.             office.Come(person1, new DateTime(2021, 11, 14, 13, 0, 0));
  133.             office.Come(person2, new DateTime(2021, 11, 14, 18, 0, 0));
  134.  
  135.             office.Leave(person1);
  136.             office.Leave(person2);
  137.  
  138.             office.Leave(person7);
  139.             office.Leave(person6);
  140.         }
  141.     }
  142. }
  143.  
RAW Paste Data