/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example7_11.cs illustrates casting objects
*/
using System;
// declare the MotorVehicle class (the base class)
class MotorVehicle
{
public string model;
public MotorVehicle(string model)
{
this.model = model;
}
public void Start()
{
Console.WriteLine(model + " started");
}
}
// declare the Car class
class Car : MotorVehicle
{
public bool convertible;
public Car(string model, bool convertible) :
base(model)
{
this.convertible = convertible;
}
}
// declare the Motorcycle class
class Motorcycle : MotorVehicle
{
public bool sidecar;
// define a constructor
public Motorcycle(string model, bool sidecar) :
base(model)
{
this.sidecar = sidecar;
}
public void PullWheelie()
{
Console.WriteLine(model + " pulling a wheelie!");
}
}
public class Example7_11
{
public static void Main()
{
// create a Car object
Car myCar = new Car("MR2", true);
// cast myCar to MotorVehicle (upcast)
MotorVehicle myMotorVehicle = (MotorVehicle) myCar;
// myMotorVehicle only has a model field and Start() method
// (no convertible field)
Console.WriteLine("myMotorVehicle.model = " + myMotorVehicle.model);
myMotorVehicle.Start();
// Console.WriteLine("myMotorVehicle.convertible = " +
// myMotorVehicle.convertible);
// create a Motorcycle object
Motorcycle myMotorcycle = new Motorcycle("V-Rod", true);
// cast myMotorcycle to MotorVehicle (upcast)
MotorVehicle myMotorVehicle2 = (MotorVehicle) myMotorcycle;
// myMotorVehicle only has a model field and Start() method
// (no sidecar field or PullWheelie() method)
Console.WriteLine("myMotorVehicle2.model = " + myMotorVehicle2.model);
myMotorVehicle2.Start();
// Console.WriteLine("myMotorVehicle2.sidecar = " +
// myMotorVehicle2.sidecar);
// myMotorVehicle2.PullWheelie();
// cast myMotorVehicle2 to Motorcycle (downcast)
Motorcycle myMotorcycle2 = (Motorcycle) myMotorVehicle2;
// myMotorCycle2 has access to all members of the Motorcycle class
Console.WriteLine("myMotorcycle2.model = " + myMotorcycle2.model);
Console.WriteLine("myMotorcycle2.sidecar = " + myMotorcycle2.sidecar);
myMotorcycle2.Start();
myMotorcycle2.PullWheelie();
// cannot cast a Motorcyle object to the Car class because
// their classes are not compatible
// Car myCar2 = (Car) myMotorVehicle2;
}
}