illustrates the use of a multicast delegate

image_pdfimage_print

   

/*
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);

  }

}