Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Помимо свойств, определенных в интерфейсах, которые реализуются в классе HashSet
, в него введено дополнительное свойство Comparer
, приведенное ниже.
public IEqualityComparer Comparer { get; }
Оно позволяет получать метод сравнения для вызывающего хеш-множества.
Ниже приведен конкретный пример применения класса HashSet
.
// Продемонстрировать применение класса HashSet.
using System;
using System.Collections.Generic;
class HashSetDemo {
static void Show(
string msg, HashSet set) {
Console.Write(msg);
foreach(char ch in set)
Console.Write(ch + " ");
Console.WriteLine();
}
static void Main() {
HashSet setA = new HashSet();
HashSet setB = new HashSet();
setA.Add('A');
setA.Add('В');
setA.Add('C');
setB.Add('C');
setB.Add('D');
setB.Add('Е');
Show("Исходное содержимое множества setA: ", setA);
Show("Исходное содержимое множества setB: ", setB);
setA.SymmetricExceptWith(setB);
Show("Содержимое множества setA после " +
"разноименности со множеством SetB: ", setA);
setA.UnionWith(setB);
Show("Содержимое множества setA после " +
"объединения со множеством SetB: ", setA);
setA.ExceptWith(setB);
Show("Содержимое множества setA после " +
"вычитания из множества setB: ", setA);
Console.WriteLine();
}
}
Ниже приведен результат выполнения программы из данного примера.
Исходное содержимое множества setA: A B C
Исходное содержимое множества setB: С D Е
Содержимое множества setA после разноименности со множеством SetB: А В D Е
Содержимое множества setA после объединения со множеством SetB: А В D Е С
Содержимое множества setA после вычитания из множества setB: А В
Класс SortedSet
представляет собой новую разновидность коллекции, введенную в версию 4.0 среды .NET Framework. В нем поддерживается коллекция, реализующая отсортированное множество. В классе SortedSet
реализуются интерфейсы ISet, ICollection, ICollection, IEnumerable, IEnumerable, ISerializable
, а также IDeserializationCallback
. В коллекции типа SortedSet
реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются. В классе SortedSet
определяется полный набор операций с множеством, определенных в интерфейсе ISet
, включая пересечение, объединение и разноименность. Благодаря тому что все элементы коллекции типа SortedSet
сохраняются в отсортированном порядке, класс SortedSet
оказывается идеальным средством для работы с отсортированными множествами объектов. Коллекция типа SortedSet
имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться.
Ниже перечислены четыре наиболее часто используемые конструктора, определенных в классе SortedSet
.
public SortedSetO
public SortedSet(IEnumerable collection)
public SortedSet(IComparer comparer)
public SortedSet(IEnumerable collection, IComparer comparer)
В первой форме конструктора создается пустое множество, а во второй форме — множество, состоящее из элементов указываемой коллекции collection. В третьей форме конструктора допускается указывать способ сравнения с помощью параметра comparer. А в четвертой форме создается множество, состоящее из элементов указываемой коллекции collection , и используется заданный способ сравнения comparer. Имеется также пятая форма конструктора данного класса, в которой допускается инициализировать множество последовательно упорядоченными данными.
В классе SortedSet
реализуется интерфейс ISet
, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод GetViewBetween()
, возвращающий часть множества в форме объекта типа SortedSet
, метод RemoveWhere()
, удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату, а также метод Reverse()
, возвращающий объект типа IEnumerable
, который циклически проходит множество в обратном порядке.
Помимо свойств, определенных в интерфейсах, которые реализуются в классе SortedSet
, в него введены дополнительные свойства, приведенные ниже.
public IComparer Comparer { get; }
public T Max { get; }
public T Min { get; }
Свойство Comparer
получает способ сравнения для вызывающего множества. Свойство Мах
получает наибольшее значение во множестве, а свойство Min
— наименьшее значение во множестве.
В качестве примера применения класса SortedSet
на практике просто замените обозначение HashSet
на SortedSet
в исходном коде программы из предыдущего подраздела, посвященного коллекциям типа HashSet
.
Параллельные коллекции
В версию 4.0 среды .NET Framework добавлено новое пространство имен System.Collections.Concurrent. Оно содержит коллекции, которые являются потокобезопасными и специально предназначены для параллельного программирования. Это означает, что они могут безопасно использоваться в многопоточной программе, где возможен одновременный доступ к коллекции со стороны двух или больше параллельно исполняемых потоков. Ниже перечислены классы параллельных коллекций.
Параллельная коллекция - Описание
BlockingCollection - Предоставляет оболочку для блокирующей реализации интерфейса IProducerConsumerCollection
ConcurrentBag - Обеспечивает неупорядоченную реализацию интерфейса IProducerConsumerCollection,которая оказывается наиболее пригодной в том случае, когда информация вырабатывается и потребляется в одном потоке
ConcurrentDictionary - Сохраняет пары “ключ-значение", а значит, реализует параллельный словарь
ConcurrentQueue -Реализует параллельную очередь и соответствующий вариант интерфейса IProducerConsumerCollection
ConcurrentStack -Реализует параллельный стек и соответствующий вариант интерфейса IproducerConsumerCollection
Как видите, в нескольких классах параллельных коллекций реализуется интерфейс IProducerConsumerCollection
. Этот интерфейс также определен в пространстве имен System.Collections.Concurrent
. Он служит в качестве расширения интерфейсов IEnumerable, IEnumerable
и ICollection
. Кроме того, в нем определены методы TryAdd()
и TryTake()
, поддерживающие шаблон "поставщик-потребитель". (Классический шаблон "поставщик-потребитель" отличается решением двух задач. Первая задача производит элементы коллекции, а другая потребляет их.) Метод TryAdd()
пытается добавить элемент в коллекцию, а метод TryTake()
— удалить элемент из коллекции. Ниже приведены формы объявления обоих методов.
Интервал:
Закладка: