雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

C# でクラス名と同名のメソッドを定義する

通常、 C# では、クラス名と同名のメソッドは定義する事が出来ません。(コンストラクタとかぶってしまう為)
VB ではこれが出来たりするんですが(コンストラクタを New と云う名のメソッドとして定義するから)、まぁ言語による制限だと諦めていました。(実際、クラス名とメソッド名を同じにしなきゃいけないシチュエーションなんてほとんどないですし)
ただ、さっきふと「 C# でも拡張メソッドを使えば定義できるんじゃね?」と思いたったので、早速やってみました。

namespace Jp.Mkns.Practice {
  public static class FooExtention {
    public static void Foo(this Foo obj) {
      System.Console.WriteLine("Foo.Foo()");
    }
  }

  public class Foo {
    public Foo() {
      System.Console.WriteLine("Foo@ctor");
    }

    static void Main() {
      var obj = new Foo();
      obj.Foo();
    }
  }
}

実行結果。

Foo@ctor
Foo.Foo()

って事で、出来るみたいですね。
利用価値は……、 VB から C# へのマイニングのときに使えない事はないかも?