2012-03-21 12 views
0

VB.Netには汎用関数があります。また、ABという2つのクラスがあります。私の関数の汎用的な制約によって、TypeがクラスAまたはBのいずれかになるようにすることは可能ですか?クラスABは、オブジェクトを除くすべての基本クラスを共有しません。Typeを2つの異なるクラスにする一般的な制約

+6

は非常に一般的な音ではありません:-) .NETでこれを使用していただければ幸いですということでした。 – Jodrell

答えて

6

これはできません。 2つのクラスの共通APIを使用してインターフェイスを作成し、両方のクラスでそのインターフェイスを実装することをお勧めします。

+0

コードの再利用、OOの観点から好ましい – Jodrell

0

私は最近、Javaの学習に焦点を当てていますが、これが可能であることがわかりました。ジェネリックパラメータを宣言するときは、 "&"演算子を使用して複数のジェネリック制約を組み合わせることができます。これは次のようになります。この上

public class List<T extends IInterface1 & IInterface2> { 
... 
} 

私が最初に考えたのは、私がなぜちょうどオーバーロードされたメソッドを宣言しない、

+0

.NETおよびC#も複数の制約をサポートしています。しかし、ソートx OR y、xとyのみの制約を持つことはできません。例えば。 'void foo ()ここで、T:IEnumerable、new()'は、Tが列挙型であり、デフォルトコンストラクタを必要とします。しかし、それが列挙可能であるか、またはデフォルトのコンストラクタを持たなければならないと言う方法はありません。それは実際にはいくつかの状況ではかなり便利なので、残念です。 –

関連する問題