/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example12_2.cs illustrates the use of a multicast delegate */ using System; // declare the DelegateCalculation delegate class public delegate void DelegateCalculation( double acceleration, double time ); // declare the MotionCalculations class class MotionCalculations { // FinalSpeed() calculates the final speed public static void FinalSpeed( double acceleration, double time ) { double finalSpeed = acceleration * time; Console.WriteLine("finalSpeed = " + finalSpeed + " meters per second"); } // Distance() calculates the distance traveled public static void Distance( double acceleration, double time ) { double distance = acceleration * Math.Pow(time, 2) / 2; Console.WriteLine("distance = " + distance + " meters"); } } public class Example12_2 { public static void Main() { // declare and initialize the acceleration and time double acceleration = 10; // meters per second per second double time = 5; // seconds Console.WriteLine("acceleration = " + acceleration + " meters per second per second"); Console.WriteLine("time = " + time + " seconds"); // create delegate object that call the // MotionCalculations.FinalSpeed() and // MotionCalculations.Distance() methods DelegateCalculation myDelegateCalculation1 = new DelegateCalculation(MotionCalculations.FinalSpeed); DelegateCalculation myDelegateCalculation2 = new DelegateCalculation(MotionCalculations.Distance); // create a multicast delegate object from // myDelegateCalculation1 and // myDelegateCalculation2 DelegateCalculation myDelegateCalculations = myDelegateCalculation1 + myDelegateCalculation2; // calculate and display the final speed and distance // using myDelegateCalculations myDelegateCalculations(acceleration, time); } }