いいえ、これはできません。これは、主にC++テンプレートとC#のジェネリックの違いによって発生します。
C++テンプレートをコンパイルすると、結果コードのタイプはvector<int>
とvector<string>
のようになります。これはコンパイラが可能なすべての型パラメータを知っていなければならないことを意味しますが、それが正しいかどうかチェックすることもできます。
C#ジェネリック型をコンパイルすると、実際には1つのジェネリック型、つまりList<T>
が作成されます。このため、C#コンパイラはコンパイルタイプで可能なタイプをすべて知っている必要はありません。つまり、バイナリライブラリに汎用タイプを持つことができます。これはC++では不可能です。しかし、これはまた、すべてのタイプをチェックすることができないことを意味します。そのようなことをするためには制約がありますが、C++のコンパイル時間チェックは、ある種のメソッド(インタフェースや基本クラスを使用せずに)や適切な演算子の存在の有無をチェックするようなことはできません。
C#4で、dynamic
を使用して、テンプレートのこの種に幾分同様の効果を得ることができますが、これはあなたが安全性を失うことを意味何コンパイル時のチェック、しません - あなたが持っていないタイプで置くことができますが適切なメンバであり、実行時にそのコード行に到達するまではわかりません。
しかし、インタフェースの制約は、 'Tがシグネチャと一致するメソッドX()を実装しています 'のようなものを表現するのにかなり良い方法です。 –