using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestConsole { class Program { static void Main(string[] args) { Vehicle ford = new Vehicle("Volkwagen Thing", 1972, new List { "AM/FM Radion", "8-Track Cassette" }); Console.WriteLine(ford.ToString()); Car car = new Car("Nissan Altima", 2002, new List { "CD", "Sunroof", "Keyfob", "GPS", "Skirts", "Tinted Windows" }); Console.WriteLine(car.ToString()); Motorcycle yamaha = new Motorcycle("Yamaha", 2007); Console.WriteLine(yamaha.ToString()); Truck Chevy = new Truck("Chevrolet", 2008, new List { "Mud Guards", "Bed Liner" }); Console.WriteLine(Chevy.ToString()); Console.ReadLine(); } } /// /// simple base class to illustrate constuctor chaining /// public class Vehicle { protected string modelName = string.Empty; protected int manufacturedYear = 0; protected List availableOptions = new List(); protected string vin = string.Empty; protected Vehicle() { } public Vehicle(string modelName) : this() { this.modelName = modelName; } public Vehicle(string modelName, int manufacturedDate) : this(modelName) { this.manufacturedYear = manufacturedDate; } public Vehicle(string modelName, int manufacturedDate, List availableOptions) : this(modelName, manufacturedDate) { this.availableOptions = availableOptions; } public Vehicle(string modelName, int manufacturedDate, List availableOptions, string vin) : this(modelName, manufacturedDate, availableOptions) { this.vin = vin; } public override string ToString() { return modelName.ToUpper() + " Manufactured: " + manufacturedYear.ToString() + (availableOptions.Count == 0 ? String.Empty : " with " + availableOptions.Count + " Options."); } } public class Car : Vehicle { public Car(string carName, int yearMade) : base(carName, yearMade) { } public Car(string carName, int yearMade, List availableOptions) : base(carName, yearMade, availableOptions) { } public Car(string carName, int yearMade, List availableOptions, string vin) : base(carName, yearMade, availableOptions, vin) { } } public class Motorcycle : Vehicle { private Motorcycle() : base() { } public Motorcycle(string modelName) : this() { this.modelName = modelName; } public Motorcycle(string modelName, int yearMade) : this(modelName) { this.manufacturedYear = yearMade; } public Motorcycle(string modelName, int yearMade, string vin) : this(modelName, yearMade) { this.vin = vin; } } public class Truck : Vehicle { private Truck() : base() { } public Truck(string modelName) : this(modelName, 0) { } public Truck(string modelName, int yearName) : this(modelName, yearName, null) { } public Truck(string modelName, int yearMade, List availableOptions) : this(modelName, yearMade, availableOptions, null) { } public Truck(string modelName, int yearMade, List availableOptions, string vin) { this.modelName = modelName; this.manufacturedYear = yearMade; this.availableOptions = availableOptions; this.vin = vin; } } }