Всем привет. Что не так с этим кодом? Не выводит в консоль полный вывод. Должно быть так:
***** Delegates as event enablers *****
***** Speeding np *****
CurrentSpeed = 30
CurrentSpeed = 50
CurrentSpeed = 70
А выводит так:
***** Delegates as event enablers *****
***** Speeding np *****
using System;
namespace CarDelegate
{
public class Car
{
//Данные состояния
public int CurrentSpeed { get; set; }
public int MaxSpeed { get; set; } = 100;
public string PetName { get; set; }
//Исправен ли автомобиль
private bool carIsDead;
//Конструкторы класса
public Car() { }
public Car(string name, int maxSp, int currSp)
{
CurrentSpeed = currSp;
MaxSpeed = maxSp;
PetName = name;
}
// 1. Определить тип делегата.
public delegate void CarEngineHandler(string msgForCaller);
//2. Определить переменную-член этого типа делегата.
private CarEngineHandler listOfHandlers;
// 3. Добавить регистрационную функцию для вызывающего кода.
public void RegisterWithCarEngine(CarEngineHandler methodToCall)
{
listOfHandlers = methodToCall;
}
// 4. Реализовать метод Accelerate () для обращения к списку
// вызовов делегата в подходящих обстоятельствах.
public void Accelerate(int delta)
{
// Если этот автомобиль сломан, то отправить сообщение об этом,
if (carIsDead)
{
if (listOfHandlers != null)
{
listOfHandlers("Sorry, this car is dead...");
}
else
{
CurrentSpeed += delta;
}
// Автомобиль почти сломан?
if (10 == (MaxSpeed - CurrentSpeed) && listOfHandlers != null)
{
listOfHandlers("Careful buddy! Gonna blow!");
}
if (CurrentSpeed >= MaxSpeed)
{
carIsDead = true;
}
else
{
Console.WriteLine("CurrentSpeed = {0}", CurrentSpeed);
}
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("***** Delegates as event enablers *****\n");
// Создать объект Car.
Car c1 = new Car("SlugBug", 100, 10);
// Сообщить объекту Car, какой метод вызывать,
// когда он пожелает отправить сообщение.
c1.RegisterWithCarEngine(new Car.CarEngineHandler(OnCarEngineEvent));
// Увеличить скорость (это инициирует события).
Console.WriteLine("***** Speeding up *****");
for (int i = 0; i < 6; i++)
{
c1.Accelerate(20);
}
Console.ReadLine();
}
public static void OnCarEngineEvent(string msg)
{
Console.WriteLine("\n***** Message From Car Object *****");
Console.WriteLine("=> {0}", msg);
Console.WriteLine("***********************************\n");
}
}
}