using System.Collections.Generic;
public static void Main()
MyPets pets = new MyPets();
pets.addPet(new Cat("Bob", 2, Mood.Surly));
pets.addPet(new Terrier("Jack", 17, Mood.Surly));
pets.addPet(new SheepDog("Bubba", 2, Mood.Happy));
public void doItterate(Cat c)
Console.WriteLine(c.ToString());
public void doItterate(Dog d)
Console.WriteLine(d.ToString());
public abstract class Pet
public Pet(string name, int age, Mood mood)
public abstract void makeNoise();
public override string ToString()
return this.Name + " is " + this.Age + " years old and feels " + this.MoodOfPet;
public abstract void accept(Visitor v);
public abstract class Dog : Pet
public Dog(string name, int age, Mood mood): base (name, age, mood)
public override void makeNoise()
Console.WriteLine(this.Name + " is woofing");
public override void accept(Visitor v)
public class SheepDog : Dog
public SheepDog(string name, int age, Mood mood): base (name, age, mood)
public Cat(string name, int age, Mood mood): base (name, age, mood)
Console.WriteLine(this.Name + " is climbing");
public override void makeNoise()
Console.WriteLine(this.Name + " is meowing");
public override void accept(Visitor v)
public class Terrier : Dog
public Terrier(string name, int age, Mood mood): base (name, age, mood)
Console.WriteLine(this.Name + " is growling");
public override void makeNoise()
private Visitor visitor = new Visitor();
public void addPet(Pet p)