Я создал автомобиль класса, производный образуют абстрактного TransportMeans класса и реализует интерфейс PrivateMeans, который содержит только одно свойства:IComparer на основе имущества интерфейса
interface PrivateMean
{
int capacity { set; get; }
}
Я хочу реализовать класс, который сортирует объекты класс Автомобиль в зависимости от мощности объекта. Я хочу сделать это с помощью интерфейса 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 без определения типа (Car). Зачем?
'IComparer' и' IComparer 'это разные интерфейсы. Текст вашего вопроса упоминает один, в то время как код использует другой. Если вы хотите использовать немодулированную версию 'IComparer', вам нужно удалить' ', где вы укажете реализованные интерфейсы, откуда вы реализуете интерфейс, и измените параметры типа в реализации на' object'. –