/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example8_4.cs illustrates casting an object to an interface */ using System; // define the IDrivable interface interface IDrivable { // method declarations void Start(); void Stop(); // property declaration bool Started { get; } } // Car class implements the IDrivable interface class Car : IDrivable { // declare the underlying field used by the Started property private bool started = false; // implement the Start() method public void Start() { Console.WriteLine("car started"); started = true; } // implement the Stop() method public void Stop() { Console.WriteLine("car stopped"); started = false; } // implement the Started property public bool Started { get { return started; } } } public class Example8_4 { public static void Main() { // create a Car object Car myCar = new Car(); // use the is operator to check that myCar supports the // IDrivable interface if (myCar is IDrivable) { Console.WriteLine("myCar supports IDrivable"); } // cast the Car object to IDrivable IDrivable myDrivable = (IDrivable) myCar; // call myDrivable.Start() Console.WriteLine("Calling myDrivable.Start()"); myDrivable.Start(); Console.WriteLine("myDrivable.Started = " + myDrivable.Started); // call myDrivable.Stop() Console.WriteLine("Calling myDrivable.Stop()"); myDrivable.Stop(); Console.WriteLine("myDrivable.Started = " + myDrivable.Started); // cast the Car object to IDrivable using the as operator IDrivable myDrivable2 = myCar as IDrivable; if (myDrivable2 != null) { Console.WriteLine("Calling myDrivable2.Start()"); myDrivable2.Start(); Console.WriteLine("Calling myDrivable2.Stop()"); myDrivable2.Stop(); Console.WriteLine("myDrivable2.Started = " + myDrivable2.Started); } } }