using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
public abstract class Animal {
protected string name;
public string Name {
get {
return name;
}
set {
name = value;
}
}
public Animal() {
name = "The animal with no name";
}
public Animal(string newName) {
name = newName;
}
public void Feed() {
Console.WriteLine("{0} has been fed.", name);
}
}
public class Chicken : Animal {
public void LayEgg() {
Console.WriteLine("{0} has laid an egg.", name);
}
public Chicken(string newName)
: base(newName) {
}
}
public class Cow : Animal {
public void Milk() {
Console.WriteLine("{0} has been milked.", name);
}
public Cow(string newName)
: base(newName) {
}
}
public class Animals : DictionaryBase {
public void Add(string newID, Animal newAnimal) {
Dictionary.Add(newID, newAnimal);
}
public void Remove(string animalID) {
Dictionary.Remove(animalID);
}
public Animals() {
}
public new IEnumerator GetEnumerator() {
foreach (object animal in Dictionary.Values)
yield return (Animal)animal;
}
public Animal this[string animalID] {
get {
return (Animal)Dictionary[animalID];
}
set {
Dictionary[animalID] = value;
}
}
}
class Program {
static void Main(string[] args) {
Animals animalCollection = new Animals();
animalCollection.Add("A", new Cow("A"));
animalCollection.Add("B", new Chicken("B"));
foreach (Animal myAnimal in animalCollection) {
Console.WriteLine(myAnimal.ToString() + myAnimal.Name);
}
}
}