使用泛型扩展接口的类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用泛型扩展接口的类相关的知识,希望对你有一定的参考价值。

所以我正在滚动我自己的最大堆,并且我使用扩展接口的泛型类做错了。说我有这样一个类:

class SuffixOverlap:IComparable<SuffixOverlap>
{
    //other code for the class
     public int CompareTo(SuffixOverlap other)
    {
        return SomeProperty.CompareTo(other.SomeProperty);
    }
}

然后我创建我的堆类:

class LiteHeap<T> where T:IComparable
{
    T[] HeapArray;
    int HeapSize = 0;
    public LiteHeap(List<T> vals)
    {
        HeapArray = new T[vals.Count()];
        foreach(var val in vals)
        {
            insert(val);
        }
    }

    //the usual max heap methods
}

但是当我尝试这样做时:

LiteHeap<SuffixOverlap> olHeap = new LiteHeap<SuffixOverlap>(listOfSuffixOverlaps);

我收到错误:The type SuffixOverlap cannot be used as a type parameter T in the generic type or method LiteHeap<T>. There is no implicit reference conversion from SuffixOverlap to System.IComparable.

我如何创建LiteHeap作为使用通用类T实现IComparable的类,所以我可以编写new LiteHeap<SomeClass>,它将在SomeClass实现IComparable的地方工作

答案

IComparableIComparable<T>是不同的,完全不相关的接口。

您需要将其更改为where T : IComparable<T>,以便它实际匹配您的班级。

以上是关于使用泛型扩展接口的类的主要内容,如果未能解决你的问题,请参考以下文章

对泛型的理解

扩展片段的类中的选项卡

泛型的类,接口和方法

在扩展片段活动android的类中加载soundpool

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

使用泛型实现和扩展接口