public string Name { get; set;}
public int Size { get; set;}
public int Weight {get; set; }
public void ReportLoadingAttempt(bool succeeded, IVehicle vehicle)
if(succeeded) Console.WriteLine(Name + " has been loaded onto " + vehicle.Name);
else Console.WriteLine(Name + " NOT LOADED onto " + vehicle.Name);
public interface IVehicle
Cargo LoadedCargo { get; set;}
public static string GetSpecsStringForVehicle(IVehicle vehicle)
return "This vehicle has " + vehicle.Wheels + " wheels, can seat " + vehicle.Seats + " " + (vehicle.Seats == 1 ? "person" : "people") + " and has " + vehicle.Doors + " doors";
static void TestVehicle(IVehicle vehicleToTest, Cargo[] cargos)
Console.WriteLine(vehicleToTest.Name + ":");
Console.WriteLine(vehicleToTest.Specs);
foreach(Cargo cargoToTryLoading in cargos)
vehicleToTest.LoadedCargo = cargoToTryLoading;
Console.WriteLine("FINAL CARGO for " + vehicleToTest.Name + ": " + vehicleToTest.LoadedCargo.Name);
public static void Main()
Cargo[] cargos = new Cargo[]
new Cargo() { Name = "Backpack", Size = 5, Weight = 5 },
new Cargo() { Name = "Bike", Size = 20, Weight = 25 },
new Cargo() { Name = "Camping gear", Size = 45, Weight = 35 },
new Cargo() { Name = "Shopping centre delivery", Size = 120, Weight = 150 }
Motorcycle motorbike = new Motorcycle("Motorbike");
TestVehicle(motorbike, cargos);
Car smallCar = new Car("Small car", 2, 2, 20, 20);
TestVehicle(smallCar, cargos);
Car averageCar = new Car("Average car", 4, 5, 50, 30);
TestVehicle(averageCar, cargos);
Car peopleCarrier = new Car("People carrier", 4, 8, 60, 40);
TestVehicle(peopleCarrier, cargos);
Truck eightWheeler = new Truck("8 wheeler truck", 8);
TestVehicle(eightWheeler, cargos);
Truck twoWheelTruck = new Truck("2 wheeler truck", 2);
Console.WriteLine(ex.Message);
Car twelveSeatCar = new Car("Minibus!", 4, 12, 80, 80);
Console.WriteLine(ex.Message);