/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example12_3.cs illustrates the use of a delegate that calls object methods */ using System; // declare the DelegateCalculation delegate class public delegate string DelegateDescription(); // declare the Person class class Person { // declare two private fields private string name; private int age; // define a constructor public Person(string name, int age) { this.name = name; this.age = age; } // define a method that returns a string containing // the person's name and age public string NameAndAge() { return(name + " is " + age + " years old"); } } // declare the Car class class Car { // declare two private fields private string model; private int topSpeed; // define a constructor public Car(string model, int topSpeed) { this.model = model; this.topSpeed = topSpeed; } // define a method that returns a string containing // the car's model and top speed public string MakeAndTopSpeed() { return("The top speed of the " + model + " is " + topSpeed + " mph"); } } public class Example12_3 { public static void Main() { // create a Person object named myPerson Person myPerson = new Person("Jason Price", 32); // create a delegate object that calls myPerson.NameAndAge() DelegateDescription myDelegateDescription = new DelegateDescription(myPerson.NameAndAge); // call myPerson.NameAndAge() through myDelegateDescription string personDescription = myDelegateDescription(); Console.WriteLine("personDescription = " + personDescription); // create a Car object named myCar Car myCar = new Car("MR2", 140); // set myDelegateDescription to call myCar.MakeAndTopSpeed() myDelegateDescription = new DelegateDescription(myCar.MakeAndTopSpeed); // call myCar.MakeAndTopSpeed() through myDelegateDescription string carDescription = myDelegateDescription(); Console.WriteLine("carDescription = " + carDescription); } }