ЭКЗАМЕН_ИНФА
.pdf
множество средств для создания чистого и эффективного кода. Вот некоторые из ключевых особенностей C#:
Анонимные методы:
Анонимные методы в C# позволяют создавать инлайн-методы без необходимости явного определения отдельного метода. Это особенно полезно при работе с событиями и делегатами, так как анонимные методы могут быть использованы для создания компактных обработчиков событий на лету.
Пример анонимного метода:
delegate(int x) { return x * x; }
В данном случае, анонимный метод принимает один параметр x типа int и возвращает результат умножения x на самого себя. Это выражение эквивалентно функции ( )= ^2, которая является квадратичной функцией.
Автоматические свойства:
Автоматические свойства упрощают процесс создания свойств класса, позволяя опустить явное определение полей класса. Они автоматически создают закрытое поле, к которому можно получить доступ через get и set аксессоры.
Пример автоматического свойства:
public string Name { get; set; }
Сборка мусора:
Сборка мусора (Garbage Collection, GC) в C# — это процесс автоматического освобождения памяти, который управляется CLR (Common Language Runtime). GC отслеживает объекты, которые больше не используются программой, и освобождает занимаемую ими память. Это значительно уменьшает риск утечек памяти и ошибок связанных с неправильным управлением памятью.
Сборка мусора работает в несколько этапов:
1.Маркировка: GC идентифицирует все живые объекты.
2.Очистка: GC удаляет объекты, которые не были помечены как живые.
3.Компактизация: GC перемещает живые объекты, чтобы устранить фрагментацию памяти и оптимизировать последующие выделения памяти.
Эти особенности C# способствуют созданию более чистого, безопасного и легко поддерживаемого кода, что делает язык выбором для многих разработчиков.
73. Объектно-ориентированный язык С#. Коллекции.
Самым примитивным способом хранения объектов в C# является использование массивов. Одной из основных проблем, с которой столкнется разработчик следуя такому подходу, является то, что массивы не предоставляют инструментов для динамического изменения размера. В языке C# есть два пространства имен для
работы со структурами данных:
•System.Collections;
•System.Collections.Generic.
Первое из них – System.Collections предоставляет структуры данных для хранения объектов типа Object. У этого решения есть две основных проблемы – это производительность и безопасность типов. В настоящее время не рекомендуется использовать объекты классов из System.Collections.
Для решения указанных выше проблем Microsoft были разработаны коллекции с обобщенными типами (их ещё называют дженерики),
они расположены в пространстве имен System.Collections.Generic.
Суть их заключается в том, что вы не просто создает объект класса List, но и указываете, объекты какого типа будут в нем храниться, делается это так: List<T>, где T может быть int, string, double или какой-то ваш собственный класс.
Обобщенные коллекции - это те же самые обобщенные классы. И опять же их использование перед необобщенными коллекциями имеет те же преимущества: повышение производительности (не надо тратить время на упаковку и распаковку объекта) и повышенная типобезопасность.
Классы обобщенных коллекций находятся в пространстве имен
System.Collections.Generic. Функционал коллекций также по большей части описывается в обобщенных интерфейсах.
Только интерфейсы обобщенных коллекций отличаются от необобщеных двойников не только наличием универсального параметра T, но и самой функциональностью.
Рассмотрим основные интерфейсы обобщенных коллекций:
•IEnumerable<T>: определяет метод GetEnumerator, с помощью которого можно получать элементы любой коллекции. Реализация данного интерфейса позволяет перебирать элементы коллекции с помощью цикла foreach
•IEnumerator<T>: определяет методы, с помощью которых потом можно получить содержимое коллекции по очереди
•ICollection<T>: представляет ряд общих свойств и методов для всех обобщенных коллекций (например, методы CopyTo, Add, Remove, Contains, свойство Count)
•IList<T>: предоставляет функционал для создания последовательных списков
•IComparer<T>: определяет метод Compare для сравнения двух однотипных объектов
•IDictionary<TKey, TValue>: определяет поведение коллекции, при котором она должна хранить объекты в виде пар ключзначение: для каждого объекта определяется уникальный ключ типа, указанного в параметре TKey, и этому ключу соответствует определенное значение, имеющее тип, указанный в параметре
TValue
•IEqualityComparer<T>: определяет методы, с помощью которых два однотипных объекта сравниваются на предмет равенства
Эти интерфейсы реализуются следующими классами коллекций в пространстве имен
System.Collections.Generic:
•List<T>: класс, представляющий последовательный список.
Реализует интерфейсы IList<T>, ICollection<T>, IEnumerable<T>
•Dictionary<TKey, TValue>: класс коллекции, хранящей наборы пар "ключ-значение". Реализует интерфейсы ICollection<T>, IEnumerable<T>, IDictionary<TKey, TValue>
•LinkedList<T>: класс двухсвязанного списка. Реализует интерфейсы ICollection<T> и IEnumerable<T>
•Queue<T>: класс очереди объектов, работающей по алгоритму FIFO("первый вошел -первый вышел"). Реализует интерфейсы
ICollection, IEnumerable<T>
•SortedSet<T>: класс отсортированной коллекции однотипных объектов. Реализует интерфейсы ICollection<T>, ISet<T>, IEnumerable<T>
•SortedList<TKey, TValue>: класс коллекции, хранящей наборы пар "ключ-значение", отсортированных по ключу. Реализует интерфейсы ICollection<T>, IEnumerable<T>, IDictionary<TKey, TValue>
•SortedDictionary<TKey, TValue>: класс коллекции, хранящей наборы пар «ключ-значение», отсортированных по ключу. В общем похож
на класс SortedList<TKey, TValue>, основные отличия состоят лишь в использовании памяти и в скорости вставки и удаления
•Stack<T>: класс стека однотипных объектов. Реализует интерфейсы ICollection, IReadOnlyCollection<T> и IEnumerable<T>
Большинство обобщенных классов коллекций дублируют необобщенные классы коллекций. Но если вам не надо хранить объекты разных типов, то предпочтительнее использовать обобщенные коллекции.
74. Объектно-ориентированный язык С#. Интерфейсы коллекций. Специализированные коллекции.
Язык программирования C# является объектно-ориентированным языком, который поддерживает концепцию интерфейсов коллекций, позволяя разработчикам создавать гибкие и мощные системы управления данными. Интерфейсы коллекций в C# предоставляют стандартизированный набор методов для работы с группами объектов.
Основные интерфейсы коллекций в C# включают:
•IEnumerable и IEnumerator: Позволяют перебирать коллекцию, используя оператор foreach.
•ICollection: Расширяет IEnumerable, добавляя методы для управления размером коллекции, проверки наличия элементов и копирования элементов в массив.
•IList: Расширяет ICollection, предоставляя методы для работы с индексированными коллекциями, такими как добавление, удаление и изменение элементов по индексу.
Специализированные коллекции в C# предназначены для решения конкретных задач и часто предоставляют более эффективную работу с данными для определенных сценариев. Примеры специализированных коллекций:
•List<T>: Представляет строго типизированный список объектов, которые можно доступны по индексу.
•Dictionary<TKey, TValue>: Коллекция пар "ключ-значение", которая позволяет быстро получать значение по ключу.
•Queue<T>: Очередь, работающая по принципу "первым пришел
—первым ушел" (FIFO).
•Stack<T>: Стек, работающий по принципу "последним пришел
—первым ушел" (LIFO).
•HashSet<T>: Коллекция, которая содержит уникальные элементы и обеспечивает быструю проверку наличия элементов.
Каждая из этих коллекций реализует один или несколько интерфейсов коллекций, что обеспечивает единообразие в работе с различными типами данных. Это позволяет разработчикам использовать полиморфизм и писать более универсальный и переиспользуемый код.
75. Объектно-ориентированный язык С#. Модель потоков. Работа с файлами.
Объектно-ориентированный язык C# (C Sharp) является одним из основных языков программирования для платформы .NET. Он предоставляет разработчикам мощные инструменты для разработки приложений на различных платформах, таких как Windows, macOS и Linux.
Модель потоков в C# представлена с помощью пространства имён
`System.Threading`. Она позволяет создавать и управлять потоками выполнения в многопоточных приложениях. Потоки позволяют выполнять несколько задач одновременно, что может быть полезно для повышения производительности в определенных ситуациях.
C# предоставляет несколько способов работы с файлами. Один из самых распространенных способов - использование классов
`System.IO.File` и
`System.IO.FileStream`. Класс `File` предлагает методы для чтения,
записи, удаления и перемещения файлов. Класс `FileStream` позволяет работать с потоками ввода-вывода для файлов, что позволяет более гибко управлять операциями чтения и записи.
Пример чтения файла в C# с использованием класса `File`:
Пример записи в файл с использованием класса `File`:
76. Объектно-ориентированный язык С#. LINQ. Синтаксис запросов. Примеры программ.
Объектно-ориентированный язык программирования C# был разработан компанией
Microsoft и предназначен для создания различных приложений под платформу .NET. В C# и .NET встроена технология LINQ (Language-
Integrated Query), которая предоставляет удобный и выразительный синтаксис для работы с коллекциями и данными.
Синтаксис запросов LINQ в C# имеет следующую структуру:
В запросе LINQ мы указываем откуда брать элементы (коллекция), затем можем применять различные операции, такие как объединение (join clause), определение переменных (let clause),
фильтрацию (where clause) и сортировку (orderby clause). Затем мы выбираем какую информацию из этих элементов хотим получить
(select expression).
Ниже приведены примеры программ, использующих синтаксис запросов LINQ в C#:
1. Пример выборки и фильтрации элементов из коллекции чисел:
2. Пример объединения двух коллекций:
В приведенных примерах показаны только основные конструкции запросов LINQ в C#. Я рекомендую изучить дополнительные материалы и примеры для более полного понимания LINQ и его возможностей.
77. Объектно-ориентированный язык С#. LINQ. Операции с коллекциями. Concat. Union. Примеры программ.
Операции `Concat` и `Union` в LINQ (Language Integrated Query)
являются методами для работы с коллекциями в объектноориентированном языке C#.
1.`Concat` объединяет две коллекции в одну коллекцию, сохраняя все элементы из каждой коллекции. Пример использования:
Вывод:
1
2
3
4
5
6
2.`Union` объединяет две коллекции в одну коллекцию, удаляя дубликаты элементов.
Пример использования:
Вывод:
