Answer the question
In order to leave comments, you need to log in
What's Wrong With Troelsen's Code - Delegates?
Hello. What's wrong with this code? Does not print full output to the console. It should be like this:
***** 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");
}
}
}
Answer the question
In order to leave comments, you need to log in
And why should he output something?
Look closely at the implementation of the Accelerate method
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question