C C T B H P N
click to close

Inheritance.cs, Inheritance.txt, Code folder, Inheritance.htm

Inheritance hierarchies support flexibile implementation by allowing substitution, in a method's calling arguments, of a base reference by a reference to an instance of any derived type. See methods doOps and doOp, in class TestPeople, below.

  /////////////////////////////////////////////////////////////////////
  // InheritanceDemo.cs - demonstrates basic inheritance             //
  //                                                                 //
  // Jim Fawcett, CSE681 - Software Modeling and Analysis, Fall 2017 //
  /////////////////////////////////////////////////////////////////////

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;

  namespace InheritanceDemo
  {
    ///////////////////////////////////////////////////////////////////
    // Person class is base for inheritance hierarchy

    public class Person
    {
      public string name { get; set; } = "basic person";
      public Action methodToExecute { get; set; }

      public virtual void eat()
      {
        Console.Write("\n    {0} is eating", name);
      }
      public virtual void sleep()
      {
        Console.Write("\n    {0} is sleeping", name);
      }
    }
    ///////////////////////////////////////////////////////////////////
    // Soldier is a Person and is base for Soldier hierarchy

    public class Soldier : Person
    {
      public Soldier(string myName = "soldier")
      {
        name = myName;
      }
      public List<string> gear { get; set; } = new List<string>();
      public virtual void salute()
      {
        Console.Write("\n    {0} saluting superior officer", name);
      }
      public virtual void inspection()
      {
        Console.Write("\n    {0} is participating in an inspection", name);
      }
    }
    ///////////////////////////////////////////////////////////////////
    // Captain class - top rank Soldier for this example

    public class Captain : Soldier
    {
      public Captain(string myName)
      {
        name = myName;
      }
      public override void salute()
      {
        Console.Write("\n    casual salute");
      }
      public override void inspection()
      {
        Console.Write("\n    Captain {0} is inspecting his platoon", name);
        salute();
      }
    }
    ///////////////////////////////////////////////////////////////////
    // Private is a lowly Soldier

    public class Private : Soldier
    {
      public Private(string myName)
      {
        name = myName;
      }
      public override void salute()
      {
        Console.Write("\n    snappy salute");
      }
      public override void inspection()
      {
        Console.Write("\n    {0} presents his equipment for inspection:", name);
        salute();

        if (gear.Count > 0)
        {
          foreach(var item in gear)
          {
            Console.Write("\n      {0} presents {1}", name, item);
          }
        }
        else
        {
          Console.Write("\n      Sorry sir, I forgot my equipment");
        }
      }
    }
    ///////////////////////////////////////////////////////////////////
    // Sergeant is the Soldier that gets everything done

    public class Sergeant : Soldier
    {
      public Sergeant(string myName)
      {
        name = myName;
      }
      public override void salute()
      {
        Console.Write("\n    brisk salute");
      }
      public override void inspection()
      {
        Console.Write("\n    Sergeant {0} presents his platoon", name);
        salute();
      }
    }
    ///////////////////////////////////////////////////////////////////
    // TestPeople class demonstrates the hierarchy

    class TestPeople
    {
      private Captain captain;
      private Sergeant sergeant;
      private List<Person> enlisted = new List<Person>();

      public void doOps(string methodName)
      {
        doOp(captain, methodName);
        doOp(sergeant, methodName);
        foreach(Soldier dogface in enlisted)
        {
          doOp(dogface, methodName);
        }
      }
      public void doOp(Soldier soldier , string methodName)
      {
        switch (methodName)
        {
          case "sleep":
            soldier.sleep();
            break;
          case "eat":
            soldier.eat();
            break;
          case "salute":
            soldier.salute();
            break;
          case "inspection":
            soldier.inspection();
            break;
          default:
            break;
        }
      }
      static void Main(string[] args)
      {
        Console.Write("\n  Demonstrating inheritance");
        Console.Write("\n ===========================");

        TestPeople tp = new TestPeople();

        Private sam = new Private("Sam");
        sam.gear.Add("M16 rifle");
        sam.gear.Add("Field Pack");
        tp.enlisted.Add(sam);
        Private george = new Private("George");
        george.gear.Add("50 Caliber Machinegun");
        george.gear.Add("Field Pack");
        tp.enlisted.Add(george);
        Private slacker = new Private("Slacker");
        tp.enlisted.Add(slacker);

        tp.sergeant = new Sergeant("Gonsales");
        tp.sergeant.gear.Add("M16 Carbine");
        tp.sergeant.gear.Add("Field Pack");

        tp.captain = new Captain("Wang");
        tp.captain.gear.Add("45 Caliber pistol");

        Console.Write("\n  The night before inspection:");
        tp.doOps("sleep");
        Console.Write("\n  The morning of inspection:");
        tp.doOps("eat");
        Console.Write("\n  The inspection:");
        tp.doOps("inspection");

        Console.Write("\n\n");
      }
    }
  }