C# 始めたばかりの初心者だけど、C# のジェネリクスにちょっと失望…

C++ の template と比べるとできることが少ない…


それにしてもコンストラクタ制約はちょっとイケてないと思った。デフォルトコンストラクタしか使えないなんて…、引数ありのコンストラクタを呼び出したいケースもけっこうあるだろうに…



using System;


class Foo<T>

{

 private T t;


 public Foo()

 {

  t = (T)Activator.CreateInstance(typeof(T), 10);

 }

 ...

}


class Bar

{

 public Bar(int i) {

 ...

}


Foo<Bar> fooBar = new Foo<Bar>();

...



でも、リフレクション使えばコンストラクタ制約なんて使わなくてもインスタンス生成できるじゃん。ジェネリックメソッドにしておけば…



public static T CreateInstance<T>(params object[] args)

{

 return (T)Activator.CreateInstance(typeof(T), args);

}



もっとも、リフレクションだと実行時にしかエラー検出できないし、パフォーマンス的にもたぶん劣るから(キャストが必要だったり、ときにはボックス化が行われたりと)、やっぱ new T(10); と書けた方がいいですよねきっと。