ArrayList of Custom Objects
namespace Ch11Ex01
{
class Program {
static void Main(string[] args) {
WriteLine("Create an ArrayList type collection of Animal " +
"objects and use it:");
ArrayList animalArrayList = new ArrayList();
Cow myCow2 = new Cow("Rual");
animalArrayList.Add(myCow2);
animalArrayList.Add(new Chicken("Andrea"));
foreach (Animal myAnimal in animalArrayList)
{
WriteLine($"New {myAnimal.ToString()} object added to ArrayList collection," +
$" Name = {myAnimal.Name}");
} // New Ch11Ex01.Cow object added to ArrayList collection, Name = Rual
WriteLine($"ArrayList collection contains {animalArrayList.Count} "
+ " objects.");
((Animal)animalArrayList[0]).Feed();
((Chicken)animalArrayList[1]).LayEgg();
ReadKey();
}
}
}
The last two lines shown above are interesting and require some explanation. First, review polymorphism.
The ArrayList collection is a collection of System.Object objects (you have assigned Animal objects via polymorphism). This means that you must use casting for all items.
namespace Ch11Ex01 // file: Animal.cs
{
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() => WriteLine($"{name} has been fed.");
}
}
namespace Ch11Ex01 // file: Cow.cs
{
public class Cow : Animal {
public void Milk() => WriteLine($"{name} has been milked.");
public Cow(string newName) : base(newName) { }
}
}
namespace Ch11Ex01 // Chicken.cs
{
public class Chicken : Animal {
public void LayEgg() => WriteLine($"{name} has laid an egg.");
public Chicken(string newName) : base(newName) { }
}
}