C# 类同时实现和继承
本文关键字:继承 实现 | 更新日期: 2023-09-27 18:33:33
我想声明一个继承泛型类并实现接口的类,如下所示:
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# 编译器无法编译此类;在我看来,语法不支持这种情况。
有人会遇到这样的困难并有解决方案吗?
只需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
接口。
首先,
您需要使接口成为接口,而不是类:
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);
}