/// <summary>
        /// Main Task02 method.
        /// </summary>
        public static void Main()
        {
            Person john = new Person {
                Name = "John"
            };
            Person paul = new Person {
                Name = "Paul"
            };
            Person george = new Person {
                Name = "George"
            };
            Person ringo = new Person {
                Name = "Ringo"
            };

            DateTime morningTime   = new DateTime(2017, 6, 27, 10, 0, 0);
            DateTime afternoonTime = new DateTime(2017, 6, 27, 13, 0, 0);
            DateTime eveningTime   = new DateTime(2017, 6, 27, 17, 0, 0);

            MessageSenderEventArgs eventArgs = new MessageSenderEventArgs(morningTime);

            john.Arrived(eventArgs);
            paul.Arrived(eventArgs);
            eventArgs = new MessageSenderEventArgs(afternoonTime);
            george.Arrived(eventArgs);
            eventArgs = new MessageSenderEventArgs(eveningTime);
            ringo.Arrived(eventArgs);

            john.Left();
            paul.Left();
            george.Left();
            ringo.Left();

            Console.ReadKey();
        }
 /// <summary>
 /// Handles arrival event.
 /// </summary>
 /// <param name="e">Passes MessageSenderEventArgs value.</param>
 public void Arrived(MessageSenderEventArgs e)
 {
     this.Arrival += this.ArrivedMessage;
     this.OnArrival(e);
     Person.ArrivalTime = e.Time;
     Office.AddPerson(this);
 }
 /// <summary>
 /// Messages about person arrival.
 /// </summary>
 /// <param name="sender">Passes sender value.</param>
 /// <param name="e">Passes MessageSenderEventArgs value.</param>
 private void ArrivedMessage(object sender, MessageSenderEventArgs e)
 {
     this.Write(string.Format("{0} arrived.", this.Name));
 }
 /// <summary>
 /// Raises the event associated with the MessageSenderEventHandler delegate.
 /// </summary>
 /// <param name="e">Passes MessageSenderEventArgs parameter.</param>
 protected virtual void OnArrival(MessageSenderEventArgs e)
 {
     this.Arrival?.Invoke(this, e);
 }