using System.Collections.Generic;
string Sound { get; set; }
public abstract class AnimalBase : Animal
public string Sound { get; set; } = "Hmmm...";
protected abstract void MakeSound();
public static AnimalBase GetAnimal(string type)
public AnimalBase Instance()
public class Dog : AnimalBase
protected override void MakeSound()
public class Cat : AnimalBase
protected override void MakeSound()
public static void Main()
List<Animal> animals = new List<Animal>();
Console.WriteLine(animals.ElementAt(0).Sound);
Console.WriteLine(animals.ElementAt(1).Sound);
Console.WriteLine(AnimalBase.GetAnimal("dog").Sound);
Console.WriteLine(AnimalBase.GetAnimal("cat").Sound);