1

テンプレート クラス ( ) を作成します。このクラスを 2 つのインターフェイス (および)class Entry<T>から継承させたいと考えています。これを試してみました。IComparable<T>IEquatable<T>

class Entry<T> where T : IComparable<T>, IEquatable<T>
{
 /* Whatever in the class */
}

そして私は次のコードを試しました:

class Entry<T> : IEquatable<T>, where T : IComparable<T>
{
 /* Whatever in the class */
}

しかし、どれも正しく機能しませんでした。理由はわかりません。複数のインターフェイスの継承を使用する方法を教えてください。

4

1 に答える 1

2

IEquatable<T>と の両方を実装するには、次の署名を使用します IComparable<T>

public class Entry<T> : IComparable<T>, IEquatable<T>
{
    public int CompareTo(T other)
    {
        //compare logic... 
    }

    public bool Equals(T other)
    {
        return CompareTo(other) == 0;
    }
}

最初の例は、句を使用して、 「 andを実装する型引数のみを受け入れる where」というジェネリック型制約を形成しています。IComparable<T>IEquatable<T>

2 番目の例には無効な構文があります。T IEquatable<T>テイクは実装する必要がありますIComparable<T>と言おうとしているようです。それをしたい場合は、 にも制約する必要がありTますclass Entry<T>

于 2013-05-11T23:48:35.783 に答える