Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация интерфейса IComparable<>, Сортировка типа 
:(
    Опции темы
SemenKandiba
Дата 25.8.2015, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.8.2015

Репутация: нет
Всего: нет



Здравствуйте!
Нужна помощь в понимании сути происходящего.
Ниже мой класс Person (c поляи firsName, lansName) как по учебнику реализует интерфейс IComparable<>. Далее в где то в методе MAIN создается массив объектов Person и реализация IComparable<> позволяет сделать сортировку внутри этого массива. Я не могу понять одного, как работает мой метод CompareTo с методом Sort() класса System.Array Понятно, что мой  CompareTo() указывает способ сортировки объектов Person. Понятен принцип сортировки, но я не понимаю, хоть убей:

1) Почему классу Person обязательно необходимо "наследовать" IComparable<>, почему просто недостаточно иметь в классе метод CompareTo()
2) Как метод Sort() увязывается с моим методом CompareTo и принимает от него способ сортировки.

Лично я грешу на то, что не до конца уловил суть интерфейсов, как они взаимодействуют с различными классами. Еще плохо, что на MSDN я вижу, например, сигнатуру метода Array.Sort(), но не вижу тело метода, что происходит внутри него. Но главное для меня, конечно, понять роль в этом всем интерфейса IComparable<>. Без понимания этого я просто не могу двигаться дальше, весь издергался уже.  smile 
Корифеи, очень прошу объяснить этот момент!!!



public class Person: IComparable<Person>
    {
        private string firstName;
        private string lastName;

        public string FirsName { get { return firstName; } set { firstName = value; } }
        public string LastName { get { return lastName; } set { lastName = value; } }

        public Person(string firstName, string lastName)
        {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public int CompareTo(Person other)
        {
            if (other == null) return 1;
            int result = string.Compare(this.LastName, other.LastName);
            if (result == 0)
            {
                result = string.Compare(this.FirsName, other.FirsName);
            }
            return result;
        }




PM MAIL   Вверх
Haz
Дата 31.8.2015, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.9.2008

Репутация: нет
Всего: нет



Если судить по msdn, там явно написано "Сортирует элементы во всем одномерном массиве Array, используя реализацию интерфейса IComparable каждого элемента массива Array". Значит, нужно, чтобы тип реализовывал интерфейс IComparable. Так ка в интерфейсе явно определено, какой алгоритм используется, поэтому и надо его реализовывать. Неизвестно, какой алгоритм будет использовать Ваш собственный метод. 

P.S.: Я сам не имею никакого опыта, тоже только начинаю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0381 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.