0

我创建了一个类 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, MeansOfTransport.Car)”。

问题是什么?

此外,我不允许在没有类型定义(汽车)的情况下使用IComparer 。为什么?

4

2 回答 2

2

你有

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

你可能是说

int IComparer<Car>.Compare(Car obj1, Car obj2)
于 2012-02-21T17:31:29.230 回答
0

可能出现的问题:

  • 您需要实现一个Compare方法,但您的方法被调用Comparer
  • 您正在实施的方法是public,所以您的方法也应该是。目前您的方法没有访问修饰符,因此它将默认为internal.
于 2012-02-21T17:34:49.793 回答