我以前没有使用过代表,我正在尝试按照我书中的教程来弄清楚它们。
到目前为止,我已经了解到委托可以与返回相同类型对象的类的方法一起使用,并且与进行调用的委托相同的对象重载(如果我错了,请纠正我)。
在我正在编写的教程中,将以下代码添加到汽车类中:
public delegate void CarEngineHandler(string msgForCaller);
private CarEngineHandler listOfHandlers;
public void RegisterWithCarEngine(CarEngineHandler methodToCall)
{
   listOfHandlers = methodToCall;
}
在Main控制台应用程序中,调用以下代码:
static void Main(string[] args)
{
    Car c1 = new Car("Slugbug", 100, 10);
    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");
}
这是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! Gunna Blow!");
        }
    }
    if (CurrentSpeed >= MaxSpeed)
        carIsDead = true;
    else
        Console.WriteLine("CurrentSpeed = {0}", CurrentSpeed);
}
我很困惑到底listofHandlers是如何在这里工作的?我知道这不是任何代码的错误,但我想更多地了解代表的实际工作方式?检查那listofHandlers是null让我失望...