私は、Equalsメソッドを持つコレクションクラスを持っています。これは、各アイテム間の等価チェックを行うメソッドで渡したいものです。C#汎用制約で 'スーパータイプ'の関係を指定できますか?
public delegate bool EqualityComparer<T>(T x, T y);
public class Collection<T>
{
//...
public bool Equals<U>(Collection<T> other, EqualityComparer<U> eq) where T : U
{
// code using eq delegate to test equality between
// members of this and other collection
}
}
残念ながら、コンパイラは(「Collection.Equals()」「Tを型パラメータを定義していない、この上borks:さらに、私は、デリゲート型はTそのものだけでなく、Tのスーパークラスを操作できるようにしたいです')。このタイプの制約/操作を指定する方法はありますか?
可能なのは意味がありますか? 2つの宣言をプロジェクト全体に広げたり、指定しなくてもいいので、推論では可能にならないでしょうか? – Dykam
はい、それは完璧な意味を持っています。型パラメータを*のサブクラス*にする必要があります他の何か、なぜ他の方法ラウンドですか? (Javaのではなく、 'Tはところで、Foo'を拡張する' TスーパーFoo'を使用して、これを可能にします。) –
ああ - 私はあなたが私がライダーとして書いたものを置くためにあなたの答えを編集していた参照:) – ShuggyCoUk