Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
В интерфейсе IComparable
определяется один метод.
int CompareTo(object obj)
В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj, — отрицательное значение.
Интерфейс IComparable
является обобщенным вариантом интерфейса IComparable
. Поэтому в нем определен следующий обобщенный вариант метода CompareTo()
.
int CompareTo(Т other)
Обобщенный вариант метода CompareTo()
действует аналогично необобщенному его варианту. В нем значение вызывающего объекта также сравнивается со значением объекта, определяемого параметром other. Если значение вызывающего объекта больше, чем у объекта other, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта other, — отрицательное значение. Преимущество интерфейса IComparable
заключается в том, что он обеспечивает типовую безопасность, поскольку в этом случае тип обрабатываемых данных указывается явным образом, а следовательно, никакого приведения типа object
сравниваемого объекта к нужному типу не требуется. В качестве примера ниже приведена программа, в которой демонстрируются сортировка и поиск в массиве объектов определяемого пользователем класса.
// Отсортировать массив объектов и осуществить в нем поиск,
using System;
class MyClass : IComparable {
public int i;
public MyClass(int x) {
i = x;
}
// Реализовать интерфейс IComparable.
public int CompareTo(MyClass v) {
return i - v.i;
}
public bool Equals(MyClass v) {
return i == v.i;
}
}
class SortDemo {
static void Main() {
MyClass[] nums = new MyClass[5];
nums[0] = new MyClass(5);
nums[1] = new MyClass(2);
nums[2] = new MyClass(3);
nums[3] = new MyClass(4);
nums[4] = new MyClass(1);
// Отобразить исходный порядок следования.
Console.Write("Исходный порядок следования: ");
foreach (MyClass о in nums)
Console.Write(о.i + " ");
Console.WriteLine();
// Отсортировать массив.
Array.Sort(nums);
// Отобразить порядок следования после сортировки.
Console.Write("Порядок следования после сортировки: ");
foreach (MyClass о in nums)
Console.Write(о.i + " ");
Console.WriteLine();
// Найти объект MyClass(2).
MyClass x = new MyClass(2);
int idx = Array.BinarySearch(nums, x);
Console.WriteLine("Индекс элемента массива с объектом MyClass(2): " + idx);
}
}
При выполнении этой программы получается следующий результат.
Исходный порядок следования: 5 2 3 4 1
Порядок следования после сортировки: 1 2 3 4 5
Индекс элемента массива с объектом MyClass(2): 1
При сортировке или поиске в массиве строк может возникнуть потребность явно указать способ сравнения символьных строк. Так, если массив будет сортироваться с использованием одних настроек культурной среды, а поиск в нем — с помощью других настроек, то во избежание ошибок, скорее всего, придется явно указать способ сравнения. Аналогичная ситуация возникает и в том случае, если требуется отсортировать массив символьных строк при настройках культурной среды, отличающихся от текущих. Для выхода из подобных ситуаций можно передать экземпляр объекта типа StringComparer
параметру типа IComparer
, который поддерживается в целом ряде перегружаемых вариантов методов Sort()
и BinarySearch()
.
-----------------------------
ПРИМЕЧАНИЕ
Более подробно особенности сравнения строк рассматриваются в главе 22.
-----------------------------
Класс StringComparer
объявляется в пространстве имен System
и реализует, среди прочего, интерфейсы IComparer
и IComparer<���Т>
. Поэтому экземпляр объекта типа StringComparer
может быть передан в качестве аргумента параметру типа IComparer
. Кроме того, в классе StringComparer
определен ряд доступных только для чтения свойств, возвращающих экземпляр объекта типа StringComparer
и поддерживающих различные способы сравнения символьных строк. Все эти свойства перечислены ниже.
Свойство - Способ сравнения
public static StringComparer CurrentCulture {get; } -С учетом регистра и культурной среды
public static StringComparer CurrentCulturelgnoreCase {get; } -Без учета регистра, но с учетом культурной среды
public static StringComparer InvariantCulture {get; } -С учетом регистра и безотносительно к культурной среде
public static StringComparer InvariantCulturelgnoreCase {get; } -Без учета регистра и безотносительно к культурной среде
public static StringComparer Ordinal {get; } -Порядковое сравнение с учетом регистра
public static StringComparer OrdinallgnoreCase {get; } -Порядковое сравнение без учета регистра
Передавая явным образом экземпляр объекта типа StringComparer
, можно совершенно однозначно определить порядок сортировки или поиска в массиве. Например, в приведенном фрагменте кода сортировка и поиск в массиве символьных строк осуществляется с помощью свойства StringComparer.Ordinal
.
string[] strs = { "xyz", "one" , "beta", "Alpha" };
// ...
Array.Sort(strs, StringComparer.Ordinal);
int idx = Array.BinarySearch(strs, "beta", StringComparer.Ordinal);
Иногда оказывается полезно обратить содержимое массива и, в частности, отсортировать по убывающей массив, отсортированный по нарастающей. Для такого обращения массива достаточно вызвать метод Reverse(). С его помощью можно обратить содержимое массива полностью или частично. Этот процесс демонстрируется в приведенной ниже программе.
// Обратить содержимое массива.
using System;
class ReverseDemo {
static void Main() {
int[] nums = { 1, 2, 3, 4, 5 };
// Отобразить исходный порядок следования.
Console.Write("Исходный порядок следования: ");
foreach(int i in nums)
Console.Write(i + " ");
Console.WriteLine();
// Обратить весь массив.
Array.Reverse(nums);
// Отобразить обратный порядок следования.
Интервал:
Закладка: