C# 3.0

 一番便利なのはやっぱりExtension Method。

 とりあえずいろんなとこで使う便利なメソッドなんだけど、どのクラスが持つべきかわからないいうことがある。public staticにすると視認性がすこぶる悪いし、うまいこといかない。

 そんなときはとりあえずExtension Methodにする。

interface IHoge{}

static class HogeExtension
{
  //とりあえずインターフェースの拡張メソッドにする
  public static Foo Method(this IHoge hoge, Arg arg){ ... }
}

//このクラスでメソッドを使いたいので、interfaceを実装
class Huga : IHoge
{
  public void HugaHuga()
  {
     //拡張メソッドをthisを付けて呼び出す(thisをつけないと呼び出せない)
     Foo foo = this.Method(arg);
  }
}

 interfaceのExtension Methodにすれば、必要なやつにinterfaceを実装させると呼び出せるようになる。