C#3.0

 もう継承はいらないな。たとえば、

abstract class Human
{
   public abstract void Eat();

   public abstract void Sleep();
}
 これと、

class Human
{
   public Action Eat{ get; set; }
   public Action Sleep{ get; set; }
}

 これならば、後者は実行時に動作を入れ替えたり、組み合わせたりできる上に、クラス外の変数も必要とあらば使用できる。

abstract class Eat{ public abstract void Eat(); }
abstract class Sleep{ public abstract void Sleep(); }

class Human
{
  public Eat eat;
  public Sleep sleep;

  public void Eat(){ eat.Eat(); }
  public void Sleep(){ sleep.Sleep(); }
}

 後者の実質は大体こんな感じに近い。そしてラムダ式やなんかを使えば、Eatを継承したクラスが一瞬で作れる。