Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭКЗАМЕН_ИНФА

.pdf
Скачиваний:
6
Добавлен:
25.10.2024
Размер:
3 Мб
Скачать

множество средств для создания чистого и эффективного кода. Вот некоторые из ключевых особенностей 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` объединяет две коллекции в одну коллекцию, удаляя дубликаты элементов.

Пример использования:

Вывод: