Tak jak w temacie, nie lepiej byłoby po prostu zdefiniować jedno metodę i do niej przesyłać te stringi świadczące o aktualnym stanie silnika samochodu ?
namespace Test
{
class Car
{
public int CurrentSpeed { get; set; }
public int MaxSpeed { get; set; }
public string PetName { get; set; }
private bool carIsDead;
public Car() { MaxSpeed = 100; }
public Car(string name, int maxSp, int currSp)
{
CurrentSpeed = currSp;
MaxSpeed = maxSp;
PetName = name;
}
// 1) definiujemy delegata
public delegate void CarEngineHandler(string msgForCaller);
// 2) definiujemy zmienną składową tego delegata
private CarEngineHandler listofHandlers;
public void RegisterWithCarEngine(CarEngineHandler methodToCall)
{
listofHandlers = methodToCall;
}
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);
}
}
public static void OnCarEngineEvent(string msg)
{
Console.WriteLine("\n***** Message From Car Object *****");
Console.WriteLine("=> {0}", msg);
Console.WriteLine("**************************************\n");
}
static void Main(string[] args)
{
Car c1 = new Car("SlugBug", 100, 10);
c1.RegisterWithCarEngine(new Car.CarEngineHandler(OnCarEngineEvent));
// przyspieszay (aby wyzwolic zdarzenia)
Console.WriteLine("***** Speeding up ******");
for (int i = 0; i < 6; ++i)
{
c1.Accelerate(20);
}
Console.ReadLine();
Console.ReadKey();
}
// to jest cel wchodzacych zdarzen
}
}