IComparer, основанный на свойстве интерфейса - PullRequest
0 голосов
/ 21 февраля 2012

Я создал класс 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 без определения типа (Автомобиль).Зачем?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

У вас есть

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

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

int IComparer<Car>.Compare(Car obj1, Car obj2)
0 голосов
/ 21 февраля 2012

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

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