using System.Collections.Generic;
interface ITalkBehaviour{
class BarkBehaviour : ITalkBehaviour {
class MeowBehaviour : ITalkBehaviour {
public abstract String talk();
ITalkBehaviour talkBehaviour = new BarkBehaviour();
public override String talk() {
return talkBehaviour.talk();
ITalkBehaviour talkBehaviour = new MeowBehaviour();
public override String talk() {
return talkBehaviour.talk();
public static void Main()
List<Animal> animals = new List<Animal> {
foreach(Animal animal in animals) {
Console.WriteLine(animal.talk());