Casting objects: downcast

image_pdfimage_print

   
 
using System;
   
public class CPU {
  public string model;
   
  public CPU(string model) {
    this.model = model;
  }
   
  public void Start() {
    Console.WriteLine(model + " started");
  }
}
   
public class Intel : CPU {
  public bool convertible;
   
  public Intel(string model, bool convertible) : base(model) {
    this.convertible = convertible;
  }
}
   
public class AMD : CPU {
  public bool sidecar;
   
  public AMD(string model, bool sidecar) : base(model) {
    this.sidecar = sidecar;
  }
   
  public void PullWheelie() {
    Console.WriteLine(model + " pulling a wheelie!");
  }
   
}
   
   
class Test {
  public static void Main() {
    Intel myIntel = new Intel("MR2", true);
   
    // create a AMD object
    AMD myAMD = new AMD("V-Rod", true);
   
    // cast myAMD to CPU (upcast)
    CPU myCPU2 = (CPU) myAMD;
   
   
    // cast myCPU2 to AMD (downcast)
    AMD myAMD2 = (AMD) myCPU2;
   
    // myMotorCycle2 has access to all members of the AMD class
    Console.WriteLine("myAMD2.model = " + myAMD2.model);
    Console.WriteLine("myAMD2.sidecar = " + myAMD2.sidecar);
    myAMD2.Start();
    myAMD2.PullWheelie();

  }
}