我想声明一个继承泛型类并实现接口的类,如下所示:
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
继承,其中T
是SortableObject
的子类。 c#编译器无法编译这样的类;在我看来,语法不支持这种情况。
有人会遇到这样的困难,并为此找到解决方案吗?
答案 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);
}