基于接口属性的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。为什么?
您有
int IComparer<Car>.Comparer(Car obj1, Car obj2)
你可能是指
int IComparer<Car>.Compare(Car obj1, Car obj2)
可能的问题:
- 您需要实现一个
Compare
方法,但您的方法称为Comparer
- 您正在实现的方法是
public
,所以您的方法也应该是。目前,您的方法没有访问修饰符,因此它将默认为internal