ジェネリック: Java vs C# その2

NyaRuRuさんから、C#の場合new制約を明示することでこんな書き方ができるという事をコメント頂いた。(自分で書いたライブラリィ中に同様の記述をしたことがあるのにすっかり失念していた)

static T GetInstance() where T :new()
{ 
    return new T();
} 

クラス宣言内のすべての型引数にパブリックなパラメータなしのコンストラクタが必要であることを制約として科すわけだが、おかげで非常にすっきりした記述になる。
new 制約 (C# リファレンス)/C# プログラマーズ リファレンス
new T()とActivator.CreateInstance()との違いだが、前者は引数無しのコンストラクタがあることを明示しているのでプログラム実行前にコンストラクタにアクセスできないとコンパイルできない。後者はより動的だが実行時までコンストラクタへのアクセスを行わないので例外が発生する可能性があることだ。