C# 3.0 その2

 もう継承する必要もあまりない感じで。

public abstract class Animal
{
  public abstract void Bark();
  public abstract void Run();
}

public class Dog : Animal
{
  public override void Bark(){ Console.WriteLine("わんわん"); }
  public override void Run(){ Console.WriteLine("ハッハッハッハ"); }
}

//他にも猫とかライオンとかいろいろ作る

 これはC#1.0の考え方だ。C#3.0だと

public class Animal
{
  public Action Bark{ get; private set; }
  public Action Run{ get; private set; }

  public Animal(Action bark, Action run)
  {
     Bark = bark; Run = run;
  }
}

void Main()
{
  Animal dog = new Animal(() => Console.WriteLine("ワンワン"), 
                          () => Console.WriteLine("ハッハッハ");
}

 こんな風になったり、

public class Dog : Animal
{
  public Dog() : base( ()=>Console.WriteLine("ワンワン"),
                       ()=>Console.WriteLine("ハッハッハ")){}
}

 こんな風になったりする。