2012-02-21 4 views
0

Я создал автомобиль класса, производный образуют абстрактного 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). Зачем?

+0

'IComparer' и' IComparer 'это разные интерфейсы. Текст вашего вопроса упоминает один, в то время как код использует другой. Если вы хотите использовать немодулированную версию 'IComparer', вам нужно удалить' ', где вы укажете реализованные интерфейсы, откуда вы реализуете интерфейс, и измените параметры типа в реализации на' object'. –

ответ

2

Вы

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

вероятно Вы имели в виду

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

Хороший улов ..... –

+0

У вас его есть, теперь он работает. – arjacsoh

0

Возможные проблемы:

  • Вам нужно реализовать метод Compare, но у вас называется Comparer
  • Метод вы выполняете ting - public, поэтому ваш тоже должен быть. В настоящее время ваш метод не имеет модификатора доступа, поэтому он будет по умолчанию internal.
Смежные вопросы