Generics C#

using System;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Text;
public class Chicken : Animal {
    public void LayEgg() {
        Console.WriteLine("{0} Animal.", name);
    }
    public Chicken(string newName)
        : base(newName) {
    }
}
public class Cow : Animal {
    public void Milk() {
        Console.WriteLine("{0} cow.", name);
    }
    public Cow(string newName)
        : base(newName) {
    }
}
public abstract class Animal {
    protected string name;
    public string Name {
        get {
            return name;
        }
        set {
            name = value;
        }
    }
    public Animal() {
        name = "animal";
    }
    public Animal(string newName) {
        name = newName;
    }
    public void Feed() {
        Console.WriteLine("{0} is feeding.", name);
    }
}
class Program {
    static void Main(string[] args) {
        Collection animalCollection = new Collection();
        animalCollection.Add(new Cow("A"));
        animalCollection.Add(new Chicken("B"));
        foreach (Animal myAnimal in animalCollection) {
            myAnimal.Feed();
        }
    }
}