using System.Collections.Generic;
public static void Main()
Person p1 = new Student("Nathan", "Forsyth", 36, "Level 6 Software Development");
HeadCount.InstantiationCount++;
Person p2 = new Student("Angie", "IDONTKNWTHELASTNAME", 25, "Level 5 Software Development");
HeadCount.InstantiationCount++;
Person p3 = new Tutor("Ross", "Someone", 500, "Java Tutor");
((Tutor)p3).Salary = 50000;
HeadCount.InstantiationCount++;
Person p4 = new Student("Harry", "Networking");
HeadCount.InstantiationCount++;
List<Object> people = new List<Object>();
foreach(Object o in people)
Console.WriteLine(((Tutor)o).ToString() + " and is paid $" + ((Tutor)o).Salary);
((Tutor)o).SetNewPosition("Manager", 65000);
Console.WriteLine(((Tutor)o).ToString() + " and is paid $" + ((Tutor)o).Salary);
Console.WriteLine(((Student)o).FirstName);
Console.WriteLine(((Person)o).FirstName + " is not a student or tutor!");
Console.WriteLine("Number of students instantiated = " + Student.GetStudentCount());
Console.WriteLine(HeadCount.GetHeadCount());
var students = from p in people
where ((Person)p).Age > 30
foreach (var s in students)
Console.WriteLine(((Person)s).ToString());
public static class HeadCount
public static int InstantiationCount = 0;
public static string GetHeadCount()
return "People instantiated = " + InstantiationCount;
public class Student : Person
public string Course { get; private set; }
public static int StudentCount = 0;
public static int GetStudentCount()
public Student(string fName, string lName, int age, string course) : base(fName, lName, age)
public Student(string fName, string course) : base(fName)
public override string ToString()
return base.ToString() + ", and their course is " + Course;
public class Tutor : Person
public string Position { get; private set; }
public Tutor(string fName, string lName, int age, string position) : base(fName, lName, age)
public void SetNewPosition(string pos, double newSalary)
public override string ToString()
return base.ToString() + ", and their position is " + Position;
public abstract partial class Person
public string FirstName { get; private set; }
public string LastName { get; private set; }
public int Age { get; private set; }
public abstract partial class Person
public Person(string fName, string lName, int age)
public Person(string fName)
public abstract partial class Person
public override string ToString()
return FirstName + " has no other details set";
return FirstName + " " + LastName + " is " + Age + " years old";