我以前没有使用过代表,我正在尝试按照我书中的教程来弄清楚它们。
到目前为止,我已经了解到委托可以与返回相同类型对象的类的方法一起使用,并且与进行调用的委托相同的对象重载(如果我错了,请纠正我)。
在我正在编写的教程中,将以下代码添加到汽车类中:
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
让我失望...