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

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

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);
}