books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

  ...

  // Реализация интерфейса IComparable.

  int IComparable.CompareTo(object obj)

  {

    if (obj is Car temp)

    {

      if (this.CarID > temp.CarID)

      {

        return 1;

      }

      if (this.CarID < temp.CarID)

      {

        return -1;

      }

      return 0;

    }

    throw new ArgumentException("Parameter is not a Car!");

                           // Параметр не является объектом типа Car!

  }

}

Как видите, логика метода

CompareTo()
заключается в сравнении входного объекта с текущим экземпляром на основе специфичного элемента данных. Возвращаемое значение метода
CompareTo()
применяется для выяснения того, является текущий объект меньше, больше или равным объекту, с которым он сравнивается (табл. 8.1).

Язык программирования C#9 и платформа .NET5 - _063.png

Предыдущую реализацию метода

CompareTo()
можно усовершенствовать с учетом того факта, что тип данных
int
в C# (который представляет собой просто сокращенное обозначение для типа
System.Int32
) реализует интерфейс
IComparable
. Реализовать
CompareTo()
в
Car
можно было бы так:

int IComparable.CompareTo(object obj)

{

  if (obj is Car temp)

  {

    return this.CarID.CompareTo(temp.CarID);

  }

  throw new ArgumentException("Parameter is not a Car!");

                            // Параметр не является объектом типа Car!

}

В любом случае, поскольку тип

Car
понимает, как сравнивать себя с подобными объектами, вы можете написать следующий тестовый код:

// Использование интерфейса IComparable.

// Создать массив объектов Car.

...

// Отобразить текущее содержимое массива.

Console.WriteLine("Here is the unordered set of cars:");

foreach(Car c in myAutos)

{

  Console.WriteLine("{0} {1}", c.CarID, c.PetName);

}

// Теперь отсортировать массив с применением IComparable!

Array.Sort(myAutos);

Console.WriteLine();

// Отобразить отсортированное содержимое массива.

Console.WriteLine("Here is the ordered set of cars:");

foreach(Car c in myAutos)

{

  Console.WriteLine("{0} {1}", c.CarID, c.PetName);

}

Console.ReadLine();

Ниже показан вывод, полученный в результате выполнения приведенного выше кода:

***** Fun with Object Sorting *****

Here is the unordered set of cars:

1 Rusty

234 Mary

34 Viper

4 Mel

5 Chucky

Here is the ordered set of cars:

1 Rusty

4 Mel

5 Chucky

34 Viper

234 Mary

Указание множества порядков сортировки с помощью IComparer

В текущей версии класса

Car
в качестве основы для порядка сортировки используется идентификатор автомобиля (
CarID
). В другом проектном решении основой сортировки могло быть дружественное имя автомобиля (для вывода списка автомобилей в алфавитном порядке). А что если вы хотите построить класс
Car
, который можно было бы подвергать сортировке по идентификатору и также по дружественному имени? В таком случае вы должны ознакомиться с еще одним стандартным интерфейсом по имени
IComparer
, который определен в пространстве имен
System.Collections
следующим образом:

// Общий способ сравнения двух объектов.

interface IComparer

{

  int Compare(object o1, object o2);

}

На заметку! Обобщенная версия этого интерфейса (

IСоmраrаble<Т>
) обеспечивает более безопасный в отношении типов способ обработки операций сравнения объектов. Обобщения подробно рассматриваются в главе 10.

В отличие от

IСоmраrаble
интерфейс
IComparer
обычно не реализуется в типе, который вы пытаетесь сортировать (т.е.
Car
). Взамен данный интерфейс реализуется в любом количестве вспомогательных классов, по одному для каждого порядка сортировки (на основе дружественного имени, идентификатора автомобиля и т.д.). В настоящий момент типу
Car
уже известно, как сравнивать автомобили друг с другом по внутреннему идентификатору. Следовательно, чтобы позволить пользователю объекта сортировать массив объектов
Car
по дружественному имени, потребуется создать дополнительный вспомогательный класс, реализующий интерфейс
IComparer
. Вот необходимый код (не забудьте импортировать в файл кода пространство имен
System.Collections
):

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*