c#类同时实现和继承

时间:2013-10-01 16:53:49

标签: c# class generics inheritance implementation

我想声明一个继承泛型类并实现接口的类,如下所示:

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>并从SortableObject继承,其中TSortableObject的子类。 c#编译器无法编译这样的类;在我看来,语法不支持这种情况。

有人会遇到这样的困难,并为此找到解决方案吗?

2 个答案:

答案 0 :(得分: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,则它已实现ISortableObject接口。

答案 1 :(得分:1)

你需要让你的界面成为一个界面而不是一个类:

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

接下来,声明List<T>的语法不太正确;你没有正确地宣布通用约束。它应该是:

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

最后,要让类继承自类,实现接口,并添加通用约束,您需要按顺序执行它们。在定义了通用约束之后,您无法添加接口实现。

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