using System.Collections.Generic;
static void Main(string[] args)
var animals = new List<Animal>()
var handler = new Handler();
foreach (var animal in animals)
public sealed class Handler
public void Handle(Animal animal)
handleImp((dynamic)animal);
Console.WriteLine("Handling cat");
Console.WriteLine("Handling dog");
void handleImp(Animal animal)
Console.WriteLine("Handling unrecognised animal");
public abstract class Animal
public class Dog : Animal
public class Cat : Animal
public class Rabbit: Animal