Герберт Шилдт - 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 T [ ] ToArray() -Возвращает массив, содержащий копии элементов вызывающего объекта
public void TrimExcess() -Сокращает емкость вызывающей коллекции таким образом, чтобы она не превышала 10% от количества элементов, хранящихся в ней на данный момент
В классе List
определяется также собственное свойство Capacity
, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Это свойство объявляется следующим образом.
public int Capacity { get; set; }
Свойство Capacity
позволяет установить и получить емкость вызывающей коллекции в качестве динамического массива. Эта емкость равна количеству элементов, которые может содержать коллекция до ее вынужденного расширения. Такая коллекция расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если заранее известно количество элементов коллекции. Благодаря этому исключаются издержки на выделение дополнительной памяти.
В классе List
реализуется также приведенный ниже индексатор, определенный в интерфейсе IList
.
public Т this[int index] { get; set; }
С помощью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу index.
В приведенном ниже примере программы демонстрируется применение класса List
. Это измененный вариант примера, демонстрировавшего ранее класс ArrayList
. Единственное изменение, которое потребовалось для этого, заключалось в замене класса ArrayList
классом List
, а также в использовании параметров обобщенного типа.
// Продемонстрировать применение класса List.
using System;
using System.Collections.Generic;
class GenListDemo {
static void Main() {
// Создать коллекцию в виде динамического массива.
List lst = new List();
Console.WriteLine("Исходное количество элементов: " + lst.Count);
Console.WriteLine();
Console.WriteLine("Добавить 6 элементов");
// Добавить элементы в динамический массив.
lst.Add('С');
lst.Add('А');
lst.Add('Е');
lst.Add('В');
lst.Add('D');
lst.Add('F');
Console.WriteLine("Количество элементов: " + lst.Count);
// Отобразить содержимое динамического массива,
// используя индексирование массива.
Console.Write("Текущее содержимое: ");
for (int i=0; i < lst.Count;. i++)
Console.Write(lst[i] + " ");
Console.WriteLine("\n");
Console.WriteLine("Удалить 2 элемента ");
// Удалить элементы из динамического массива.
lst.Remove('F');
lst.Remove('А');
Console.WriteLine("Количество элементов: " + lst.Count);
// Отобразить содержимое динамического массива, используя цикл foreach.
Console.Write("Содержимое: ");
foreach(char с in lst)
Console.Write(с + " ");
Console.WriteLine("\n");
Console.WriteLine("Добавить еще 20 элементов");
// Добавить количество элементов, достаточное для
// принудительного расширения массива,
for(int i=0; i < 20; i++)
lst.Add((char) ('a' + i));
Console.WriteLine("Текущая емкость: " + lst.Capacity);
Console.WriteLine("Количество элементов после добавления 20 новых: " + lst.Count);
Console.Write("Содержимое: ");
foreach(char с in lst)
Console.Write(с + " ") ;
Console.WriteLine("\n");
// Изменить содержимое динамического массива,
// используя индексирование массива.
Console.WriteLine("Изменить три первых элемента");
lst[0] = 'X';
lst[1] = 'Y' ;
lst[2] = 'Z';
Console.Write("Содержимое: ");
foreach(char с in lst)
Console.Write(с + " ");
Console.WriteLine();
// Следующая строка кода недопустима из-за
// нарушения безопасности обобщенного типа.
// lst.Add(99); // Ошибка, поскольку это не тип char!
}
}
Эта версия программы дает такой же результат, как и предыдущая.
Исходное количество элементов: 0
Добавить 6 элементов
Количество элементов: 6
Текущее содержимое: С А Е В D F
Удалить 2 элемента
Количество элементов: 4
Содержимое: С Е В D
Добавить еще 20 элементов
Текущая емкость: 32
Количество элементов после добавления 20 новых: 24
Содержимое: С Е В D a b c d e f g h i j k l m n o p q r s t
Изменить три первых элемента
Содержимое: X Y Z D a b c d e f g h i j k l m n o p q r s t
В классе LinkedList
создается коллекция в виде обобщенного двунаправленного списка. В этом классе реализуются интерфейсы ICollection, ICollection, IEnumerable, IEnumerable, ISerializable
и IDeserializationCallback
. В двух последних интерфейсах поддерживается сериализация списка. В классе LinkedList определяются два приведенных ниже открытых конструктора.
public LinkedListO
public LinkedList(IEnumerable collection)
В первом конструкторе создается пустой связный список, а во втором конструкторе — список, инициализируемый элементами из коллекции collection.
Как и в большинстве других реализаций связных списков, в классе LinkedList
инкапсулируются значения, хранящиеся в узлах списка, где находятся также ссылки на предыдущие и последующие элементы списка. Эти узлы представляют собой объекты класса LinkedListNode
. В классе LinkedListNode
предоставляются четыре следующих свойства.
public LinkedListNode Next { get; }
public LinkedListNode Previous { get; }
public LinkedList List { get; }
public T Value { get; set; }
С помощью свойств Next
и Previous
получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство List
. А с помощью свойства Value
можно устанавливать и получать значение, находящееся в узле списка.
В классе LinkedList
определяется немало методов. В табл. 25.16 приведены наиболее часто используемые методы данного класса. Кроме того, в классе LinkedList
определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.
Интервал:
Закладка: