基于接口属性的IComparer

本文关键字:属性 IComparer 接口 于接口 | 更新日期: 2023-09-27 18:25:15

我创建了一个Car类,该类派生自抽象类TransportMeans,并实现了一个仅包含一个属性的PrivateMeans接口:

interface PrivateMean 
{
int capacity { set; get; }
}

我想实现一个类,根据属性容量对类Car的对象进行排序。我想通过使用接口IComparer来实现这一点。

但是,当我声明一个附加的类CarComparer如下:

public class CarComparer : IComparer<Car>
{
    int IComparer<Car>.Comparer(Car obj1, Car obj2)
    {
        PrivateMean t1 = (PrivateMean)obj1;
        PrivateMean t2 = (PrivateMean)obj2;

        if (t1 != null && t2 != null)
        {
            if (t1.capacity >= t2.capacity)
                return 1;
            else return -1;
        }
        else
            throw new ArgumentException("Some Parameter is not a Car!");
    }
}

我收到错误:

错误1"MeansOfTransport.CarComparer"未实现接口成员"System.Collections.Generic.IComparer.Compare(MeansOfTransport.Car,MeansOfTRANS.Car)"。

问题出在哪里?

此外,如果没有类型定义(Car),我不允许使用IComparer。为什么?

基于接口属性的IComparer

您有

int IComparer<Car>.Comparer(Car obj1, Car obj2)

你可能是指

int IComparer<Car>.Compare(Car obj1, Car obj2)

可能的问题:

  • 您需要实现一个Compare方法,但您的方法称为Comparer
  • 您正在实现的方法是public,所以您的方法也应该是。目前,您的方法没有访问修饰符,因此它将默认为internal