1

次のようなジェネリック クラスを継承し、インターフェイスを実装するクラスを宣言したいと考えています。

public class SortableObject
{
    int compare(SortableObejct obj);
}

public class List<T> where T is class
{
    public void add(T obj);
    public T peekCurrent();
}

public class SortedList<T> : List<T> where T : SortableObject, SortableObject
{
    public override int compare(SortableObejct obj);
}

SortedList<T>から継承しList<T>、 から実装したいのですがSortableObjectTは からのサブクラスですSortableObject。C# コンパイラは、そのようなクラスをコンパイルできません。文法がこのケースをサポートしていないように私には思えます。

誰かがそのような困難に遭遇し、それに対する解決策を持っているでしょうか?

4

2 に答える 2

3

SortableObjectインターフェースを実装するだけです:

public interface ISortableObject
{
    int compare(SortableObejct obj);
}

public class SortableObject : ISortableObject
{
    int compare(SortableObejct obj);
}

public class SortedList<T> : List<T> where T : SortableObject

SortableObjectこれにより、実際に aである場合、インターフェイスが実装されていることが保証されISortableObjectます。

于 2013-10-01T16:55:46.687 に答える