私は今までデリゲートを使用したことがなく、私の本のチュートリアルに従ってデリゲートを理解しようとしています。
これまでのところ、デリゲートは、呼び出しを行うデリゲートと同じ型オブジェクトを返し、同じオブジェクトでオーバーロードされるクラスのメソッドで使用できることを理解しました(間違っている場合は修正してください)。
私が取り組んでいるチュートリアルでは、次のコードが車のクラスに追加されています。
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
私を失望させています...