Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
public int Length { get; set; }
Свойство Length позволяет установить или получить количество битов в коллекции. Следовательно, оно возвращает такое же значение, как и стандартное свойство Count
, определяемое для всех коллекций. В отличие от свойства Count
, свойство Length
доступно не только для чтения, но и для записи, а значит, с его помощью можно изменить размер коллекции типа BitArray
. Так, при сокращении коллекции типа BitArray
лишние биты усекаются, начиная со старшего разряда. А при расширении коллекции типа BitArray
дополнительные биты, имеющие логическое значение false
, вводятся в коллекцию, начиная с того же старшего разряда.
Кроме того, в классе BitArray
определяется следующий индексатор.
public bool this[int index] { get; set; }
С помощью этого индексатора можно получать или устанавливать значение элемента. В приведенном ниже примере демонстрируется применение класса BitArray
.
// Продемонстрировать применение класса BitArray.
using System;
using System.Collections;
class BADemo {
public static void ShowBits(string rem,
BitArray bits) {
Console.WriteLine(rem);
for(int i=0; i < bits.Count; i++)
Console.Write("{0, -6} ", bits[i]);
Console.WriteLine ("\n");
}
static void Main() {
BitArray ba = new BitArray(8);
byte[] b = { 67 };
BitArray ba2 = new BitArray(b);
ShowBits("Исходное содержимое коллекции bа:", ba);
ba = ba.Not();
ShowBits("Содержимое коллекции bа после логической операции NOT:", ba);
ShowBits("Содержимое коллекции bа2:", ba2);
BitArray baЗ = ba.Xor(ba2);
ShowBits("Результат логической операции ba XOR bа2:", baЗ);
}
}
Эта программа дает следующий результат.
Исходное содержимое коллекции bа:
False False False False False False False False
Содержимое коллекции bа после логической операции NOT:
True True True True True True True True
Содержимое коллекции bа2:
True True False False False False True False
Результат логической операции ba XOR bа2:
False False True True True True False True
Специальные коллекции
В среде .NET Framework предусмотрен ряд специальных коллекций, оптимизированных для работы с данными конкретного типа или для их обработки особым образом. Классы этих необобщенных коллекций определены в пространстве имен System.Collections.Specialized
и перечислены ниже.
Класс специальной коллекции - Описание
CollectionsUtil - Содержит фабричные методы для создания коллекций
HybridDictionary -Предназначен для коллекций, в которых для хранения небольшого количества пар “ключ-значение” используется класс ListDictionary.При превышении коллекцией определенного размера автоматически используется класс Hashtableдля хранения ее элементов
ListDictionary -Предназначен для коллекций, в которых для хранения пар “ключ-значение" используется связный список. Такие коллекции рекомендуются только для хранения небольшого количества элементов
NameValueCollection -Предназначен для отсортированных коллекций, в которых хранятся пары “ключ-значение”, причем и ключ, и значение относятся к типу string
OrderedDictionary -Предназначен для коллекций, в которых хранятся индексируемые пары “ключ-значение”
StringCollection -Предназначен для коллекций, оптимизированных для хранения символьных строк
StringDictionary -Предназначен для хеш-таблиц, в которых хранятся пары “ключ-значение”, причем и ключ, и значение относятся к типу string
Кроме того, в пространстве имен System.Collections
определены три базовых абстрактных класса: CollectionBase
, ReadOnlyCollectionBase
и DictionaryBase
. Эти классы могут наследоваться и служить в качестве отправной точки для разработки собственных специальных коллекций.
Обобщенные коллекции
Благодаря внедрению обобщений прикладной интерфейс Collections API значительно расширился, в результате чего количество классов коллекций и интерфейсов удвоилось. Обобщенные коллекции объявляются в пространстве имен System.Collections.Generic
. Как правило, классы обобщенных коллекций являются не более чем обобщенными эквивалентами рассматривавшихся ранее классов необобщенных коллекций, хотя это соответствие не является взаимно однозначным. Например, в классе обобщенной коллекции LinkedList
реализуется двунаправленный список, тогда как в необобщенном эквиваленте его не существует. В некоторых случаях одни и те же функции существуют параллельно в классах обобщенных и необобщенных коллекций, хотя и под разными именами. Так, обобщенный вариант класса ArrayList
называется List
, а обобщенный вариант класса HashTable
— Dictionary
. Кроме того, конкретное содержимое различных интерфейсов и классов реорганизуется с минимальными изменениями для переноса некоторых функций из одного интерфейса в другой. Но в целом, имея ясное представление о необобщенных коллекциях, можно без особого труда научиться применять и обобщенные коллекции.
Как правило, обобщенные коллекции действуют по тому же принципу, что и-необобщенные, за исключением того, что обобщенные коллекции типизированы. Это означает, что в обобщенной коллекции можно хранить только те элементы, которые совместимы по типу с ее аргументом. Так, если требуется коллекция для хранения несвязанных друг с другом разнотипных данных, то для этой цели следует использовать классы необобщенных коллекций. А во всех остальных случаях, когда в коллекции должны храниться объекты только одного типа, выбор рекомендуется останавливать на классах обобщенных коллекций.
Обобщенные коллекции определяются в ряде интерфейсов и классов, реализующих эти интерфейсы. Все они описываются далее по порядку.
Интерфейсы обобщенных коллекций
В пространстве имен System.Collections.Generic определен целый ряд интерфейсов обобщенных коллекций, имеющих соответствующие аналоги среди интерфейсов необобщенных коллекций. Все эти интерфейсы сведены в табл. 25.10.
Таблица 25.10. Интерфейсы обобщенных коллекций
Интерфейс - Описание
lCollection - Определяет основополагающие свойства обобщенных коллекций
IComparerОпределяет обобщенный метод Compare()для сравнения объектов, хранящихся в коллекции lDictionaryОпределяет обобщенную коллекцию, состоящую из пар “ключ-значение"
IEnumerable - Определяет обобщенный метод GetEnumerator(), предоставляющий перечислитель для любого класса коллекции
Читать дальшеИнтервал:
Закладка: