Бэкэнд-разработчик C# (Начальный уровень)
Курс «Бэкэнд-разработчик C# (Начальный уровень)» даёт базовые навыки программирования на языке C#. Обучение включает: основы синтаксиса, типы данных, условные конструкции, циклы, методы, работу с массивами и строками, основы ООП, создание консольных приложений.
В ходе курса слушатели выполнят практические задания и завершат проект — простое приложение с логикой обработки данных.
Что предстоит пройти на курсе:
- Введение в программирование
- Основы языка C#
- Работа с методами
- Массивы и строки
- Основы ООП
- Работа с коллекциями
- Обработка исключений
- Файловый ввод/вывод
- Проектная работа
Ожидаемые результаты после прохождения курса:
Слушатель должен уметь:
- Писать простые программы на C#
- Создавать и использовать методы и классы
- Обрабатывать ошибки и работать с данными
- Читать и писать данные в файлы
- Самостоятельно выполнять проекты в рамках начального уровня
Слушатель должен знать:
- Основы синтаксиса и семантики языка C#
- Принципы структурного и объектно-ориентированного программирования
- Базовые алгоритмы и логику построения программ
- Как работать с файловой системой и коллекциями
-
Что такое язык программирования C# и где он применяется?
C# — это современный объектно-ориентированный язык программирования, разработанный Microsoft для платформы .NET. Он широко используется в разработке десктоп-приложений (Windows), веб-приложений, игр (Unity), сервисов и бэкэнд-систем. -
Какие инструменты нужны для начала работы с C#?
Для работы с C# понадобится редактор кода или IDE, например Visual Studio или Visual Studio Code, а также установленная .NET SDK. Эти инструменты позволяют писать, компилировать и запускать программы на C#. -
Что такое переменные и как их объявлять в C#?
Переменные — это именованные контейнеры для хранения данных. В C# переменная объявляется указанием типа и имени:int age = 15;
string name = "Tom";
-
Какие типы данных существуют в C#?
В C# есть базовые типы: целые числа (int, long), вещественные числа (float, double), логический тип (bool), символы (char) и строки (string). Также поддерживаются составные типы, такие как массивы и классы. -
Что такое условные конструкции и как они работают в C#?
Условные конструкции (if
else if
else
switch
позволяют выполнять разные блоки кода в зависимости от истинности определённых условий. -
Как работают циклы в C#?
Циклыfor
while
do...while
используются для повторного выполнения кода. Например,for
удобен при известном количестве итераций, аwhile
работает, пока условие истинно. -
Что такое методы в C# и зачем они нужны?
Методы — это именованные блоки кода, которые можно вызывать из разных частей программы. Они помогают структурировать код, избегать дублирования и повышают читаемость. -
Как создать и использовать массивы в C#?
Массив — это коллекция элементов одного типа. Пример создания:int[] numbers = {1, 2, 3};
Доступ к элементам осуществляется по индексу:numbers[0]
-
Что такое строки в C# и какие операции с ними можно выполнять?
Строкиstring
представляют последовательность символов. С ними можно выполнять операции: конкатенация+
извлечение подстрокиSubstring()
проверка длиныLength
поиск и замена. -
Что такое объектно-ориентированное программирование (ООП)?
ООП — это парадигма программирования, основанная на понятиях классов и объектов. Она позволяет организовать код вокруг данных и поведения, упрощает расширение и поддержку программ. -
Что такое классы и объекты в C#?
Класс — это шаблон, описывающий свойства и поведение объекта. Объект — это экземпляр класса. Например, классCar
может иметь объектmyCar
-
Как работать с полями и свойствами класса?
Поля — это переменные внутри класса, хранящие данные. Свойства — это методы доступаget
set
обеспечивающие контроль над чтением и изменением значений полей. -
Что такое конструкторы в C#?
Конструктор — это специальный метод, вызываемый при создании объекта. Он используется для инициализации состояния объекта. Конструкторы могут быть без параметров или с ними. -
Как происходит взаимодействие между классами?
Классы могут содержать объекты других классов как свои поля, вызывать их методы и обмениваться данными. Это позволяет строить сложные структуры данных и логику. -
Что такое наследование в ООП?
Наследование — это механизм, позволяющий одному классу (потомку) наследовать поля и методы другого класса (родителя). Это способствует повторному использованию кода и построению иерархии классов. -
Как реализуется наследование в C#?
В C# наследование реализуется с помощью ключевого слова:
Например:class Dog : Animal
-
Что такое полиморфизм и как он работает в C#?
Полиморфизм — это возможность объектов вести себя по-разному в зависимости от контекста. В C# реализуется через переопределение методов (virtual
override
и интерфейсы. -
Что такое интерфейсы в C#?
Интерфейс — это контракт, который определяает набор методов, которые должен реализовать класс. Интерфейсы не содержат реализации, только сигнатуры методов. -
Как создавать и использовать пространства имён (namespace)?
Пространства имён группируют связанные классы и предотвращают конфликты имён. Объявляются с помощью ключевого словаnamespace
-
Что такое исключения и как с ними работать в C#?
Исключения — это ошибки, возникающие во время выполнения программы. Для их обработки используются блокиtry
catch
finally
-
Как работает система ввода-вывода в консольных приложениях?
Для ввода данных используетсяConsole.ReadLine()
для вывода —Console.WriteLine()
Эти методы позволяют взаимодействовать с пользователем через консоль. -
Как тестировать и отлаживать программы на C#?
Отладка проводится с помощью точек останова (breakpoints) в IDE. Тестирование включает проверку логики программы на различных входных данных и сценариях. -
Как оформлять комментарии в коде на C#?
Комментарии помогают документировать код. Однострочные комментарии начинаются с//
многострочные — заключаются в/* */
-
Как создать полноценное консольное приложение?
Консольное приложение состоит из главного класса с методомMain
Оно взаимодействует с пользователем через командную строку, обрабатывает ввод, выполняет логику и выводит результаты. -
Какой проект будет создан в рамках курса?
По окончании курса вы создадите собственное консольное приложение, например, «Систему учёта книг» или «Калькулятор с меню». Проект поможет закрепить все изученные темы и получить практический опыт.
-
Что такое операторы сравнения и как они используются в C#?
Операторы сравнения (==
!=
<
>
<=
>=
позволяют сравнивать значения. Они часто применяются в условных конструкциях для принятия решений на основе результатов сравнения. -
Как работают логические операторы в C#?
Логические операторы (&&
— И,||
— ИЛИ,!
— НЕ) используются для объединения или инверсии условий. Например,if (age > 10 && age < 20)
проверяет, находится ли возраст между 10 и 20. -
Что такое область видимости переменных в C#?
Область видимости определяет, где в коде можно использовать переменную. Переменные, объявленные внутри блока{}
доступны только в этом блоке. -
Что такое перегрузка методов и как она реализуется в C#?
Перегрузка методов позволяет создавать несколько методов с одинаковым именем, но разными параметрами. Компилятор выбирает нужный метод на основе переданных аргументов. -
Как работает преобразование типов в C#?
Преобразование бывает неявным без потери данных, например,int
вdouble
и явным с приведением, например,(int)doubleValue
Также используется методConvert.ToInt32()
-
Что такое статические методы и поля в классах?
Статические элементы принадлежат самому классу, а не его экземплярам. Обращение к ним происходит без создания объекта:ClassName.MethodName()
-
Как работают индексаторы в C#?
Индексаторы позволяют обращаться к элементам класса подобно массивам. Это удобно при создании собственных коллекций. -
Что такое структуры (struct) и чем они отличаются от классов?
struct
— это тип значения, который хранит данные напрямую. В отличие от классов, структуры не поддерживают наследование и обычно используются для небольших объектов. -
Как обрабатывать ошибки ввода-вывода в C#?
Для этого используются исключения и блокиtry-catch
Например, при работе с файлами могут возникнуть ошибки доступа или отсутствия файла. -
Что такое сборка мусора (Garbage Collector) в .NET?
Сборка мусора — это автоматическое управление памятью. Система сама освобождает память, занятую объектами, которые больше не используются. -
Как использовать строки форматирования в C#?
Форматирование выполняется через методstring.Format()
или интерполяцию строк с$"{variable}"
Это удобно для построения текстовых сообщений. -
Что такое константы и как их объявлять в C#?
Константы — это значения, которые не изменяются в процессе выполнения программы. Объявляются с помощью ключевого словаconst
:public const double Pi = 3.14;
-
Как работать с датами и временем в C#?
Для работы с датами используется структураDateTime
Пример:DateTime now = DateTime.Now;
— получает текущее время. -
Что такое делегаты и зачем они нужны?
Делегат — это тип, представляющий ссылку на метод. Он позволяет передавать методы в качестве параметров и вызывать их динамически. -
Как использовать случайные числа в C#?
Для генерации случайных чисел используется классRandom
Пример:Random rand = new Random(); int number = rand.Next(1, 10);
-
Что такое файлы и как с ними работать в C#?
Работа с файлами осуществляется через классыFile
StreamReader
StreamWriter
Можно читать, записывать и редактировать содержимое файлов. -
Как организовать структуру проекта в Visual Studio?
Проект содержит файлы исходного кода (.cs), ресурсы, ссылки на библиотеки. Рекомендуется группировать классы по смыслу в папки и пространства имён. -
Что такое тестирование кода и как его выполнять вручную?
Тестирование — это проверка корректности работы программы. Вручную тестируют различные сценарии ввода и проверяют ожидаемый результат. -
Как работать с коллекциями в C#?
Для хранения наборов данных используются спискиList<T>
словариDictionary<TKey, TValue>
и другие структуры из пространства имёнSystem.Collections.Generic
-
Что такое LINQ и как он используется?
LINQ (Language Integrated Query) — это набор методов для запросов к данным. Позволяет фильтровать, сортировать и преобразовывать коллекции с помощью простых выражений. -
Как использовать цикл foreach в C#?
Циклforeach
предназначен для перебора элементов коллекции или массива. Пример:foreach (string name in names) { Console.WriteLine(name); }
-
Что такое параметры по умолчанию в методах?
Параметры по умолчанию позволяют задать значение, которое будет использовано, если аргумент не передан. Пример:void Greet(string name = "User")
-
Как работать с асинхронностью в C#?
Асинхронность реализуется с помощью ключевых словasync
await
Это позволяет выполнять длительные операции (например, загрузку данных) без блокировки основного потока. -
Что такое документация кода и как её оформлять?
Документация помогает другим разработчикам понимать назначение классов и методов. В C# используются XML-комментарии:/// <summary>...
-
Как развиваться дальше после окончания курса?
После курса рекомендуется изучить работу с базами данных, веб-API, фреймворками ASP.NET, углубиться в ООП и начать практиковаться на реальных проектах.
-
Что такое параметры
ref
иout
в методах C#?
Ключевые словаref
out
позволяют передавать аргументы в метод по ссылке.ref
требует, чтобы переменная была инициализирована до вызова, аout
— внутри метода. -
Как использовать перечисления
enum
в C#?
Перечисления представляют набор именованных целочисленных констант. Пример:enum Days { Monday, Tuesday, ... }
Используются для улучшения читаемости кода. -
Что такое оператор
params
и как его применять?
Операторparams
позволяет передавать в метод неограниченное количество аргументов одного типа. Например:void Print(params int[] numbers)
-
Как работают атрибуты в C#?
Атрибуты добавляют метаданные к классам, методам или свойствам. Применяются для настройки поведения программно, например,[Obsolete]
помечает устаревший код. -
Что такое обобщения
generics
и зачем они нужны?
Обобщения позволяют создавать классы и методы с типами, которые определяются при вызове. Это обеспечивает типобезопасность и повторное использование кода. -
Как работать с файловой системой в C#?
Для работы с файлами и папками используются классыDirectory
File
Path
Можно создавать, удалять, перемещать и проверять существование файлов и директорий. -
Что такое сериализация и десериализация в C#?
Сериализация — это процесс преобразования объекта в формат, удобный для хранения (например, JSON или XML). Десериализация — обратный процесс. -
Как использовать JSON в C#?
В .NET можно сериализовать и десериализовать данные с помощьюSystem.Text.Json
МетодыJsonSerializer.Serialize()
JsonSerializer.Deserialize()
-
Что такое исключения уровня приложения и как их обрабатывать?
Это ошибки, возникающие в ходе выполнения программы. Обрабатываются через конструкциюtry-catch-finally
для предотвращения аварийного завершения. -
Как работать с коллекциями
List<T>
иDictionary<TKey, TValue>
?List<T>
— динамический массив,Dictionary<TKey, TValue>
— хранение пар "ключ-значение". Оба предоставляют методы для добавления, удаления и поиска элементов. -
Что такое LINQ-запросы и как их использовать?
LINQ-запросы позволяют фильтровать, группировать и сортировать данные. Пример:var filtered = list.Where(x => x > 10);
-
Как реализуется множественный выбор в C#?
Множественный выбор реализуется через операторswitch
который проверяет значение переменной на соответствие нескольким случаям. -
Что такое модификаторы доступа и какие они бывают в C#?
Модификаторыpublic
private
protected
internal
определяют доступность членов класса. Например,private
ограничивает доступ только внутри класса. -
Как работает принцип инкапсуляции в ООП?
Инкапсуляция скрывает внутренние детали объекта и предоставляет доступ к ним через открытые методы и свойства, что обеспечивает безопасность и контроль. -
Что такое абстрактные классы и когда их использовать?
Абстрактный класс — это класс, который не может быть создан напрямую и может содержать абстрактные методы. Используется как базовый шаблон для других классов. -
Что такое интерфейсы и чем они отличаются от абстрактных классов?
Интерфейс содержит только сигнатуры методов, без реализации. Класс может реализовывать несколько интерфейсов, но наследоваться только от одного класса. -
Как использовать асинхронные методы в C#?
Асинхронные методы объявляются с ключевым словомasync
и используютawait
для ожидания длительных операций без блокировки потока. -
Что такое многопоточность и как она реализуется в C#?
Многопоточность позволяет выполнять несколько задач одновременно. В C# используется через классThread
Task
async/await
-
Как использовать пространства имён в проекте?
Пространства имён помогают организовать код в логические группы. Они указываются в начале файла:namespace MyProject.Models
-
Что такое сборки и как они используются в .NET?
Сборка — это компилируемый файл.dll
или.exe
содержащий IL-код и метаданные. Сборки используются для хранения и распространения кода. -
Как подключать внешние библиотеки в проект?
Внешние библиотеки подключаются через NuGet-пакеты или ссылки на.dll
ИспользуетсяManage NuGet Packages
в Visual Studio или CLI. -
Что такое юнит-тестирование и как его применять?
Юнит-тестирование — это проверка отдельных частей программы. В C# используется через фреймворки, такие как MSTest, xUnit или NUnit. -
Как использовать регулярные выражения в C#?
Регулярные выражения позволяют проверять формат строк (например, email) через классRegex
Пример:Regex.IsMatch(email, pattern)
-
Что такое лямбда-выражения и как их использовать?
Лямбда-выражения — это короткие анонимные функции. Часто используются в LINQ:list.FindAll(x => x.StartsWith("A"))
-
Как оформить документацию к проекту?
Документация включает описание назначения проекта, классов, методов и примеры использования. Оформляется через XML-комментарии и README-файл.
-
Какой тип данных в C# используется для хранения целых чисел?
A) double
B) string
C) int
D) bool
Ответ: C) int -
Какой оператор используется для вывода текста в консоль?
A) Console.Read()
B) Console.WriteLine()
C) Console.Input()
D) Console.Print()
Ответ: B) Console.WriteLine() -
Как объявить переменную и присвоить ей значение 5?
A) var x = 5;
B) x = 5;
C) 5 = x;
D) variable x = 5;
Ответ: A) var x = 5; -
Какой цикл используется, если количество повторений известно заранее?
A) while
B) do...while
C) for
D) loop
Ответ: C) for -
Что означает ключевое слово
void
в объявлении метода?
A) Метод возвращает значение
B) Метод не возвращает значение
C) Метод принимает параметры
D) Метод является статическим
Ответ: B) Метод не возвращает значение -
Какой тип данных может принимать значения true или false?
A) int
B) float
C) bool
D) string
Ответ: C) bool -
Что выведет следующий код:
Console.WriteLine(3 + 5 * 2);
A) 13
B) 16
C) 10
D) 8
Ответ: A) 13 -
Как создать массив из 5 элементов типа int?
A) int array[5];
B) int[] array = new int[5];
C) array int[5];
D) new array int[5];
Ответ: B) int[] array = new int[5]; -
Что такое ООП?
A) Объединение операций программирования
B) Объектно-ориентированное программирование
C) Общая организация программ
D) Операционный порядок программирования
Ответ: B) Объектно-ориентированное программирование -
Какой модификатор доступа делает член класса доступным только внутри этого класса?
A) public
B) internal
C) private
D) protected
Ответ: C) private -
Что такое объект в контексте ООП?
A) Переменная
B) Экземпляр класса
C) Метод
D) Тип данных
Ответ: B) Экземпляр класса -
Какой метод является точкой входа в приложение C#?
A) Start()
B) Run()
C) Main()
D) Begin()
Ответ: C) Main() -
Что делает оператор
break
в цикле?
A) Продолжает выполнение цикла
B) Завершает выполнение программы
C) Выходит из цикла
D) Перезапускает цикл
Ответ: C) Выходит из цикла -
Какой метод считывает строку из консоли?
A) Console.Write()
B) Console.WriteLine()
C) Console.Read()
D) Console.ReadLine()
Ответ: D) Console.ReadLine() -
Что такое перегрузка методов?
A) Несколько методов с разными именами
B) Методы с одинаковым именем, но разными параметрами
C) Методы с одинаковыми параметрами
D) Скрытие метода
Ответ: B) Методы с одинаковым именем, но разными параметрами -
Какой тип позволяет использовать null-значения для примитивных типов?
A) object
B) nullable
C) dynamic
D) int
Ответ: B) nullable -
Какой оператор используется для проверки нескольких условий?
A) if
B) else if
C) switch
D) case
Ответ: B) else if -
Как получить длину строки в C#?
A) string.Length
B) string.Count
C) string.Size
D) string.Len
Ответ: A) string.Length -
Какой символ используется для создания интерполированной строки?
A) ** B) # C) % D) @ Ответ: A) ** -
Что означает ключевое слово
static
A) Метод можно вызвать без создания объекта
B) Метод должен быть реализован
C) Метод изменяет данные
D) Метод наследуется
Метод можно вызвать без создания объекта -
Что такое наследование?
A) Создание новых объектов
B) Использование методов другого класса
C) Копирование свойств и методов другого класса
D) Удаление класса
Ответ: C) Копирование свойств и методов другого класса -
Какой тип коллекции предоставляет доступ по индексу?
A) Dictionary
B) List
C) HashSet
D) Queue
Ответ: B) List -
Что означает оператор
is
в C#?
A) Проверяет равенство
B) Проверяет тип объекта
C) Проверяет нулевое значение
D) Проверяет логическое значение
Ответ: B) Проверяет тип объекта -
Какой метод преобразует строку в число?
A) Convert.ToInt32()
B) Parse.Int()
C) String.ToNumber()
D) Number.Parse()
Ответ: A) Convert.ToInt32() -
Что такое исключение в C#?
A) Логическая ошибка
B) Ошибка времени выполнения
C) Ошибка компиляции
D) Ошибка ввода
Ответ: B) Ошибка времени выполнения
-
Какой ключевой элемент используется для обработки исключений в C#?
A) try-catch
B) if-else
C) for-loop
D) switch-case
Ответ: A) try-catch -
Что означает ключевое слово
override
в методе?
A) Метод нельзя переопределять
B) Метод скрывает реализацию родительского класса
C) Метод переопределяет виртуальный метод базового класса
D) Метод становится статическим
Ответ: C) Метод переопределяет виртуальный метод базового класса -
Какой тип данных может содержать любые данные и часто используется при динамическом программировании?
A) object
B) dynamic
C) var
D) int
Ответ: B) dynamic -
Что такое интерфейс в C#?
A) Класс с полной реализацией
B) Набор абстрактных методов без реализации
C) Специальный тип переменной
D) Модификатор доступа
Ответ: B) Набор абстрактных методов без реализации -
Какой метод вызывается автоматически при создании объекта класса?
A) Destructor
B) Constructor
C) Static
D) Virtual
Ответ: B) Constructor -
Какой оператор используется для выхода из метода и возврата значения?
A) break
B) continue
C) return
D) exit
Ответ: C) return -
Какой тип позволяет объявлять методы, которые должны быть реализованы в наследниках?
A) Виртуальный
B) Абстрактный
C) Статический
D) Обычный
Ответ: B) Абстрактный -
Как получить текущее время в C#?
A) DateTime.Now
B) Date.Today
C) Time.Current
D) Clock.Now
Ответ: A) DateTime.Now -
Какой цикл гарантирует выполнение тела хотя бы один раз?
A) while
B) do...while
C) for
D) foreach
Ответ: B) do...while -
Как называется процесс преобразования объекта в поток байтов для хранения или передачи?
A) Компиляция
B) Десериализация
C) Сериализация
D) Оптимизация
Ответ: C) Сериализация -
Какой символ используется для создания "verbatim" строки в C#?
A) $
B) @
C) %
D) #
Ответ: B) @ -
Какой ключевой модификатор делает член класса доступным только внутри сборки?
A) private
B) protected
C) internal
D) public
Ответ: C) internal -
Какой метод класса
Random
генерирует случайное число в заданном диапазоне?
A) Generate()
B) Next()
C) Create()
D) Randomize()
Ответ: B) Next() -
Что такое полиморфизм в ООП?
A) Возможность использовать один интерфейс для разных типов
B) Создание новых объектов
C) Удаление объектов
D) Перегрузка операторов
Ответ: A) Возможность использовать один интерфейс для разных типов -
Какой ключевой метод вызывается при уничтожении объекта?
A) Constructor
B) Finalizer
C) Initializer
D) Deleter
Ответ: B) Finalizer -
Какой ключ используется для явного приведения типа?
A) cast
B) convert
C) (тип)
D) as
Ответ: C) (тип) -
Какой метод используется для фильтрации коллекции с помощью условия в LINQ?
A) OrderBy()
B) Select()
C) Where()
D) GroupBy()
Ответ: C) Where() -
Какой ключ используется для безопасного приведения типов в C#?
A) is
B) as
C) typeof
D) in
Ответ: B) as -
Какой атрибут помечает метод как устаревший?
A) [Obsolete]
B) [Deprecated]
C) [Old]
D) [NotUsed]
Ответ: A) [Obsolete] -
Какой тип коллекции не допускает дублирования элементов?
A) List
B) Dictionary
C) HashSet
D) Queue
Ответ: C) HashSet -
Какой ключевой словом обозначается асинхронный метод?
A) await
B) async
C) parallel
D) thread
Ответ: B) async -
Что означает ключевое слово
virtual
в методе?
A) Метод нельзя переопределять
B) Метод можно переопределять в производных классах
C) Метод является обязательным
D) Метод статичен
Ответ: B) Метод можно переопределять в производных классах -
Какой класс используется для работы с файлами в C#?
A) File
B) FileInfo
C) FileStream
D) Все вышеперечисленные
Ответ: D) Все вышеперечисленные -
Какой ключевой словом обозначается константа в C#?
A) static
B) readonly
C) const
D) final
Ответ: C) const -
Какой метод используется для вывода информации о типе объекта?
A) GetType()
B) ToString()
C) GetInfo()
D) TypeOf()
Ответ: A) GetType()
-
Какой ключевой словом обозначается неизменяемое свойство после инициализации?
A) final
B) readonly
C) const
D) static
Ответ: B) readonly -
Что означает метод
ToString()
в классеobject
A) Возвращает хэш-код объекта
B) Возвращает строковое представление объекта
C) Сравнивает два объекта
D) Создаёт копию объекта
Ответ: B) Возвращает строковое представление объекта -
Какой тип данных используется для хранения даты и времени в C#?
A) Date
B) Time
C) DateTime
D) Calendar
Ответ: C) DateTime -
Какой оператор проверяет, равны ли два значения?
A) =
B) ==
C) !=
D) :=
Ответ: B) == -
Какой ключ используется для создания экземпляра класса?
A) new
B) create
C) instance
D) init
Ответ: A) new -
Что делает метод
Equals()
A) Возвращает тип объекта
B) Проверяет, равен ли объект другому
C) Преобразует объект в строку
D) Уничтожает объект
Ответ: B) Проверяет, равен ли объект другому -
Какой из следующих типов является ссылочным?
A) int
B) bool
C) string
D) double
Ответ: C) string -
Какой символ используется для создания комментария в одной строке?
A) //
B) /* */
C) --
D) #
Ответ: A) // -
Что такое сборка (assembly) в .NET?
A) Исполняемый файл с расширением .exe
B) Библиотека с расширением .dll
C) Компилируемый модуль программы
D) Все вышеперечисленное
Ответ: D) Все вышеперечисленное -
Какой метод вызывается при сравнении двух строк с учётом регистра?
A) Equals()
B) CompareTo()
C) StartsWith()
D) Contains()
Ответ: A) Equals() -
Какой метод преобразует число в строку?
A) Convert.ToString()
B) Parse()
C) ToInt()
D) ToString()
Ответ: D) ToString() -
Какой ключ позволяет использовать пространства имён без полного указания?
A) using
B) namespace
C) include
D) import
Ответ: A) using -
Какой тип коллекции обеспечивает FIFO-порядок (первым вошёл — первым вышел)?
A) Stack
B) Queue
C) List
D) Dictionary
Ответ: B) Queue -
Какой метод добавляет элемент в конец списка
List<T>
A) Add()
B) Insert()
C) Push()
D) Append()
Ответ: A) Add() -
Какой атрибут помечает класс как несериализуемый?
A) [Serializable]
B) [NonSerialized]
C) [DoNotSerialize]
D) [Hidden]
Ответ: B) [NonSerialized] -
Какой цикл используется для перебора элементов коллекции?
A) for
B) while
C) foreach
D) do...while
Ответ: C) foreach -
Какой оператор проверяет, не равно ли значение чему-то?
A) ==
B) !=
C) >=
D) <=
Ответ: B) != -
Какой метод удаляет все пробелы в начале и конце строки?
A) Trim()
B) Replace()
C) Remove()
D) Substring()
Ответ: A) Trim() -
Какой ключ применяется для реализации интерфейсов?
A) extends
B) implements
C) :
D) interface
Ответ: C) : -
Что делает метод
Clear()
в спискеList<T>
A) Удаляет последний элемент
B) Удаляет все элементы
C) Очищает память
D) Завершает программу
Ответ: B) Удаляет все элементы -
Какой параметр передаётся методу
Main()
?
A) string[] args
B) int[] numbers
C) object sender
D) EventArgs e
Ответ: A) string[] args -
Какой метод позволяет выполнить код в отдельном потоке?
A) Task.Run()
B) Thread.Sleep()
C) Console.WriteLine()
D) Process.Start()
Ответ: A) Task.Run() -
Какой метод используется для поиска подстроки в строке?
A) IndexOf()
B) Length
C) Trim()
D) Split()
Ответ: A) IndexOf() -
Какой ключ позволяет использовать динамические типы?
A) dynamic
B) var
C) object
D) int
Ответ: A) dynamic -
Какой ключ используется для завершения текущего метода или цикла?
A) break
B) continue
C) return
D) exit
Ответ: C) return
Экзаменационный билет №1
Теоретическая часть
- Что такое переменная в языке C# и как её объявить?
- Какие типы данных существуют в C# и приведите примеры?
Ответы на теоретическую часть:
- Переменная — это именованное место в памяти, предназначенное для хранения значения. В C# переменная объявляется указанием типа и имени, например:
int age = 15;
- В C# есть следующие типы данных: целые числа
int
long
вещественные числаfloat
double
логический типbool
символыchar
и строкиstring
Примеры:int count = 10;
string name = "Tom";
Практическая часть
Напишите программу, которая запрашивает у пользователя его имя и возраст, а затем выводит сообщение: "Привет, [имя]! Тебе [возраст] лет."
using System;
class Program
{
static void Main()
{
Console.Write("Введите ваше имя: ");
string name = Console.ReadLine();
Console.Write("Введите ваш возраст: ");
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Console.WriteLine($"Привет, {name}! Тебе {age} лет.");
}
}
Экзаменационный билет №2
Теоретическая часть
- Что такое условные конструкции в C# и какие из них вы знаете?
- Объясните, что такое массив и как его использовать в C#?
Ответы на теоретическую часть:
- Условные конструкции позволяют выполнять разные блоки кода в зависимости от условия. В C# к ним относятся:
if
else if
else
switch
- Массив — это структура данных, которая содержит набор элементов одного типа. Объявляется так:
int[] numbers = new int[5];
или с инициализацией:int[] numbers = {1, 2, 3};
Практическая часть
Создайте программу, которая создаёт массив из 5 целых чисел, заполняет его пользовательским вводом и выводит на экран сумму всех элементов.
using System;
class Program
{
static void Main()
{
int[] numbers = new int[5];
int sum = 0;
Console.WriteLine("Введите 5 целых чисел:");
for (int i = 0; i < 5; i++)
{
numbers[i] = Convert.ToInt32(Console.ReadLine());
sum += numbers[i];
}
Console.WriteLine($"Сумма всех чисел: {sum}");
}
}
Экзаменационный билет №3
Теоретическая часть
- Что такое циклы в C# и какие виды циклов существуют?
- Что такое метод в C# и зачем он нужен?
Ответы на теоретическую часть:
- Циклы используются для повторного выполнения участка кода. В C# есть следующие виды циклов:
for
while
do...while
foreach
- Метод — это именованный блок кода, который может вызываться по имени. Он помогает структурировать программу, избежать дублирования кода и повысить читаемость.
Практическая часть
Напишите метод Multiply
принимающий два целых числа и возвращающий их произведение. Вызовите этот метод в Main
и выведите результат.
using System;
class Program
{
static int Multiply(int a, int b)
{
return a * b;
}
static void Main()
{
int result = Multiply(6, 7);
Console.WriteLine($"Результат умножения: {result}");
}
}
Экзаменационный билет №4
Теоретическая часть
- Что такое объектно-ориентированное программирование и какие основные принципы вы знаете?
- Что такое класс и объект в C#?
Ответы на теоретическую часть:
- ООП — это парадигма программирования, основанная на понятиях классов и объектов. Основные принципы: инкапсуляция, наследование, полиморфизм, абстракция.
- Класс — это шаблон, описывающий свойства и поведение объекта. Объект — это экземпляр класса. Например, класс
Car
может иметь объектmyCar
Практическая часть
Создайте класс Person
с полями Name
и Age
Добавьте конструктор, который принимает эти значения, и метод PrintInfo()
выводящий информацию о человеке. Создайте объект класса и вызовите метод.
using System;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void PrintInfo()
{
Console.WriteLine($"Имя: {Name}, Возраст: {Age}");
}
}
class Program
{
static void Main()
{
Person person = new Person("Алекс", 25);
person.PrintInfo();
}
}
Экзаменационный билет №5
Теоретическая часть
- Что такое исключения и как они обрабатываются в C#?
- Что такое строка в C# и какие операции с ней можно выполнять?
Ответы на теоретическую часть:
- Исключения — это ошибки, возникающие во время выполнения программы. Они обрабатываются с помощью конструкции
try-catch-finally
- Строка
string
представляет последовательность символов. С ними можно выполнять операции: конкатенация+
извлечение подстрокиSubstring()
проверка длиныLength
поиск и замена.
Практическая часть
Напишите программу, которая считывает строку с клавиатуры и выводит количество слов в ней. Считайте, что слова разделены пробелами.
using System;
class Program
{
static void Main()
{
Console.WriteLine("Введите строку:");
string input = Console.ReadLine();
string[] words = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"Количество слов: {words.Length}");
}
}
Экзаменационный билет №6
Теоретическая часть
- Что такое статические методы и поля в классах?
- Какие модификаторы доступа существуют в C# и как они влияют на видимость членов класса?
Ответы на теоретическую часть:
- Статические элементы принадлежат самому классу, а не его экземплярам. Они вызываются без создания объекта:
ClassName.MethodName()
- В C# модификаторы доступа:
public
доступен из любого местаprivate
доступен только внутри классаprotected
доступен внутри класса и его наследниковinternal
доступен внутри сборки
Практическая часть
Создайте статический класс MathHelper
содержащий метод Square(int number)
который возвращает квадрат числа. Вызовите этот метод в Main
и выведите результат.
using System;
static class MathHelper
{
public static int Square(int number)
{
return number * number;
}
}
class Program
{
static void Main()
{
int result = MathHelper.Square(5);
Console.WriteLine($"Квадрат числа 5: {result}");
}
}
Экзаменационный билет №7
Теоретическая часть
- Что такое интерфейсы в C# и чем они отличаются от абстрактных классов?
- Что такое перегрузка методов и как она реализуется?
Ответы на теоретическую часть:
- Интерфейс — это контракт, который определяет набор методов, которые должен реализовать класс. В отличие от абстрактного класса, интерфейс не содержит реализации, и класс может реализовывать несколько интерфейсов.
- Перегрузка методов — это возможность создавать несколько методов с одинаковым именем, но разными параметрами. Реализуется за счёт различий в количестве или типах параметров.
Практическая часть
Создайте класс Calculator
с двумя перегруженными методами Add
один принимает два целых числа, другой — три. Продемонстрируйте их работу в методе Main
using System;
class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Add(int a, int b, int c)
{
return a + b + c;
}
}
class Program
{
static void Main()
{
Calculator calc = new Calculator();
Console.WriteLine($"Сумма 2 + 3 = {calc.Add(2, 3)}");
Console.WriteLine($"Сумма 2 + 3 + 4 = {calc.Add(2, 3, 4)}");
}
}
Экзаменационный билет №8
Теоретическая часть
- Что такое наследование в ООП и как оно реализуется в C#?
- Что такое конструктор и как он используется при создании объекта?
Ответы на теоретическую часть:
- Наследование — это механизм, позволяющий одному классу (потомку) наследовать поля и методы другого класса (родителя). В C# реализуется через ключевое слово
:
- Конструктор — это специальный метод, вызываемый при создании объекта. Он используется для инициализации состояния объекта. Может быть без параметров или с ними.
Практическая часть
Создайте базовый класс Animal
с полем Name
и методом MakeSound()
Создайте производный класс Dog
который переопределяет метод MakeSound()
Протестируйте наследование в Main
using System;
class Animal
{
public string Name { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Издаёт звук");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Гав-гав!");
}
}
class Program
{
static void Main()
{
Dog myDog = new Dog();
myDog.Name = "Бобик";
Console.WriteLine($"Имя собаки: {myDog.Name}");
myDog.MakeSound();
}
}
Экзаменационный билет №9
Теоретическая часть
- Что такое обобщения
generics
и зачем они нужны в C#? - Что такое коллекции и какие основные типы коллекций в C# вы знаете?
Ответы на теоретическую часть:
- Обобщения позволяют создавать классы и методы с типами, которые определяются при вызове. Это обеспечивает типобезопасность и повторное использование кода.
- Коллекции — это структуры данных для хранения набора элементов. Основные типы:
List<T>
Dictionary<TKey, TValue>
Queue<T>
Stack<T>
Практическая часть
Создайте список студентовList<string>
и добавьте в него 5 имён. Затем удалите последнее имя и выведите все оставшиеся имена на экран.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> students = new List<string>();
students.Add("Анна");
students.Add("Борис");
students.Add("Виктория");
students.Add("Галина");
students.Add("Денис");
students.RemoveAt(students.Count - 1);
Console.WriteLine("Студенты:");
foreach (string name in students)
{
Console.WriteLine(name);
}
}
}
Экзаменационный билет №10
Теоретическая часть
- Что такое LINQ и как он используется в C#?
- Что такое файл и как с ним работать в C#?
Ответы на теоретическую часть:
- LINQ (Language Integrated Query) — это набор методов для запросов к данным. Позволяет фильтровать, сортировать и преобразовывать коллекции с помощью простых выражений.
- Файл — это место хранения данных на диске. В C# работа с файлами осуществляется через классы
File
StreamReader
StreamWriter
Практическая часть
Напишите программу, которая создаёт текстовый файл notes.txt
записывает в него строку "Привет, мир!" и считывает её обратно для вывода на экран.
using System;
using System.IO;
class Program
{
static void Main()
{
string path = "notes.txt";
File.WriteAllText(path, "Привет, мир!");
string content = File.ReadAllText(path);
Console.WriteLine("Содержимое файла:");
Console.WriteLine(content);
}
}
Экзаменационный билет №11
Теоретическая часть
- Что такое делегаты и зачем они нужны в C#?
- Как работают лямбда-выражения и где они применяются?
Ответы на теоретическую часть:
- Делегат — это тип, представляющий ссылку на метод. Он позволяет передавать методы в качестве параметров и вызывать их динамически.
- Лямбда-выражения — это короткие анонимные функции. Они часто используются с LINQ и в коллекциях для фильтрации и обработки данных.
Практическая часть
Создайте делегат MathOperation
принимающий два числа и возвращающий результат. Привяжите к нему лямбда-выражение, вычисляющее сумму двух чисел, и вызовите его.
using System;
delegate int MathOperation(int a, int b);
class Program
{
static void Main()
{
MathOperation operation = (a, b) => a + b;
int result = operation(5, 7);
Console.WriteLine($"Результат: {result}");
}
}
Экзаменационный билет №12
Теоретическая часть
- Что такое асинхронное программирование и как оно реализуется в C#?
- Что такое исключения уровня приложения и как они обрабатываются?
Ответы на теоретическую часть:
- Асинхронность реализуется через ключевые слова
async
иawait
Это позволяет выполнять длительные операции без блокировки основного потока. - Исключения уровня приложения — это ошибки, возникающие во время выполнения программы. Они обрабатываются через конструкцию
try-catch-finally
Практическая часть
Напишите асинхронный метод DownloadTextAsync()
который имитирует загрузку текста из сети, используя Task.Delay()
и выводит сообщение после завершения.
using System;
using System.Threading.Tasks;
class Program
{
static async Task DownloadTextAsync()
{
Console.WriteLine("Начинаем загрузку...");
await Task.Delay(2000); // Имитация задержки
Console.WriteLine("Загрузка завершена.");
}
static async Task Main()
{
await DownloadTextAsync();
}
}
Экзаменационный билет №13
Теоретическая часть
- Что такое пространства имён
namespace
и как они используются в проектах? - Что такое сборка мусора (Garbage Collector) в .NET?
Ответы на теоретическую часть:
- Пространства имён группируют связанные классы и предотвращают конфликты имён. Объявляются с помощью ключевого слова
namespace
- Сборка мусора — это автоматическое управление памятью. Система сама освобождает память, занятую объектами, которые больше не используются.
Практическая часть
Создайте два пространства имён: MyApp.Utilities
и MyApp.Models
В каждом создайте по одному классу с методом Print()
Вызовите оба метода в Main
using System;
using MyApp.Utilities;
using MyApp.Models;
namespace MyApp.Utilities
{
public class Utility
{
public void Print() => Console.WriteLine("Утилита");
}
}
namespace MyApp.Models
{
public class Model
{
public void Print() => Console.WriteLine("Модель");
}
}
class Program
{
static void Main()
{
var util = new Utility();
var model = new Model();
util.Print();
model.Print();
}
}
Экзаменационный билет №14
Теоретическая часть
- Что такое сериализация и десериализация в C#?
- Как использовать JSON в C#?
Ответы на теоретическую часть:
- Сериализация — это процесс преобразования объекта в формат, удобный для хранения (например, JSON или XML). Десериализация — обратный процесс.
- Для работы с JSON используется
System.Text.Json
Методы:JsonSerializer.Serialize()
иJsonSerializer.Deserialize()
Практическая часть
Создайте класс Person
с полями Name
и Age
Сериализуйте экземпляр этого класса в JSON и выведите строку на экран.
using System;
using System.Text.Json;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
var person = new Person { Name = "Алекс", Age = 25 };
var options = new JsonSerializerOptions { WriteIndented = true };
string json = JsonSerializer.Serialize(person, options);
Console.WriteLine(json);
}
}
Экзаменационный билет №15
Теоретическая часть
- Что такое индексаторы и как они используются в классах?
- Что такое структуры
struct
и чем они отличаются от классов?
Ответы на теоретическую часть:
- Индексаторы позволяют обращаться к элементам класса подобно массивам. Это удобно при создании собственных коллекций.
struct
— это тип значения, который хранит данные напрямую. В отличие от классов, структуры не поддерживают наследование и обычно используются для небольших объектов.
Практическая часть
Создайте класс MyList
содержащий массив строк и индексатор, который позволяет получать и устанавливать значения по индексу. Протестируйте его работу.
using System;
class MyList
{
private string[] items = new string[5];
public string this[int index]
{
get
{
if (index >= 0 && index < items.Length)
return items[index];
else
throw new IndexOutOfRangeException("Индекс вне диапазона");
}
set
{
if (index >= 0 && index < items.Length)
items[index] = value;
else
throw new IndexOutOfRangeException("Индекс вне диапазона");
}
}
}
class Program
{
static void Main()
{
MyList list = new MyList();
list[0] = "Первый";
list[1] = "Второй";
Console.WriteLine(list[0]);
Console.WriteLine(list[1]);
}
}
(1) Кейс: "Ошибка в системе учёта студентов"
Описание кейса
Вы — начинающий разработчик, проходящий стажировку в небольшой IT-компании, которая занимается созданием программного обеспечения для образовательных учреждений. Ваша первая задача — доработать и протестировать консольное приложение на языке C#, предназначенное для учёта студентов в учебном центре.
Приложение должно позволять:
- Добавлять новых студентов (имя, возраст, группа).
- Выводить список всех студентов.
- Поиск студентов по группе.
- Удалять студентов по имени.
Исходный скрипт
using System;
using System.Collections.Generic;
class Program
{
static List<string> names = new List<string>();
static List<int> ages = new List<int>();
static List<string> groups = new List<string>();
static void Main()
{
while (true)
{
Console.WriteLine("\nВыберите действие:");
Console.WriteLine("1 - Добавить студента");
Console.WriteLine("2 - Показать всех студентов");
Console.WriteLine("3 - Найти по группе");
Console.WriteLine("4 - Удалить студента");
Console.WriteLine("5 - Выход");
string choice = Console.ReadLine();
switch (choice)
{
case "1":
AddStudent();
break;
case "2":
ShowAllStudents();
break;
case "3":
SearchByGroup();
break;
case "4":
RemoveStudent();
break;
case "5":
return;
default:
Console.WriteLine("Неверный выбор.");
break;
}
}
}
static void AddStudent()
{
Console.Write("Введите имя: ");
string name = Console.ReadLine();
Console.Write("Введите возраст: ");
int age = int.Parse(Console.ReadLine());
Console.Write("Введите группу: ");
string group = Console.ReadLine();
names.Add(name);
ages.Add(age);
groups.Add(group);
Console.WriteLine("Студент добавлен.");
}
static void ShowAllStudents()
{
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine($"Имя: {names[i]}, Возраст: {ages[i]}, Группа: {groups[i]}");
}
}
static void SearchByGroup()
{
Console.Write("Введите группу: ");
string group = Console.ReadLine();
for (int i = 0; i < groups.Count; i++)
{
if (groups[i] == group)
{
Console.WriteLine($"Имя: {names[i]}, Возраст: {ages[i]}");
}
}
}
static void RemoveStudent()
{
Console.Write("Введите имя студента для удаления: ");
string name = Console.ReadLine();
for (int i = 0; i < names.Count; i++)
{
if (names[i] == name)
{
names.RemoveAt(i);
ages.RemoveAt(i);
groups.RemoveAt(i);
Console.WriteLine("Студент удален.");
return;
}
}
Console.WriteLine("Студент не найден.");
}
}
Анализ ситуации и выявление проблем
Проблема №1: Необработанный ввод возраста
Описание:
При вводе возраста, если пользователь введёт не число, программа завершится с исключением FormatException
Решение:
Заменить int.Parse()
на int.TryParse()
и добавить проверку корректности ввода.
Проблема №2: Параллельное хранение данных в разных списках
Описание:
Использование трёх отдельных списковnames
ages
groups
приводит к риску рассинхронизации данных.
Решение:
Создать класс Student
и использовать один список типа List<Student>
Проблема №3: Удаление только первого совпадения
Описание:
Метод RemoveStudent()
удаляет только первого студента с таким именем, даже если их несколько.
Решение:
Реализовать удаление всех студентов с заданным именем или запрашивать дополнительные данные для точного определения.
Проблема №4: Отсутствие проверки пустого ввода
Описание:
Если пользователь оставит поле ввода пустым, это может вызвать ошибку или некорректное поведение программы.
Решение:
Добавить проверки на пустую строку перед добавлением данных.
Проблема №5: Отсутствие обработки регистра при поиске и удалении
Описание:
Поиск студента чувствителен к регистру. Например, "Анна" и "анна" будут считаться разными именами.
Решение:
Использовать сравнение с игнорированием регистра, например String.Equals(name, StringComparison.OrdinalIgnoreCase)
Итоговые рекомендации по доработке скрипта
using System;
using System.Collections.Generic;
using System.Linq;
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Group { get; set; }
}
class Program
{
static List<Student> students = new List<Student>();
static void Main()
{
while (true)
{
Console.WriteLine("\n--- Система учёта студентов ---");
Console.WriteLine("1 - Добавить студента");
Console.WriteLine("2 - Показать всех студентов");
Console.WriteLine("3 - Найти по группе");
Console.WriteLine("4 - Удалить студента");
Console.WriteLine("5 - Выход");
string choice = Console.ReadLine();
switch (choice)
{
case "1":
AddStudent();
break;
case "2":
ShowAllStudents();
break;
case "3":
SearchByGroup();
break;
case "4":
RemoveStudent();
break;
case "5":
Console.WriteLine("Выход из программы.");
return;
default:
Console.WriteLine("Неверный выбор. Пожалуйста, введите число от 1 до 5.");
break;
}
}
}
static void AddStudent()
{
Console.Write("Введите имя: ");
string name = Console.ReadLine();
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Имя не может быть пустым.");
return;
}
Console.Write("Введите возраст: ");
string ageInput = Console.ReadLine();
if (!int.TryParse(ageInput, out int age) || age <= 0)
{
Console.WriteLine("Некорректный возраст.");
return;
}
Console.Write("Введите группу: ");
string group = Console.ReadLine();
if (string.IsNullOrWhiteSpace(group))
{
Console.WriteLine("Группа не может быть пустой.");
return;
}
students.Add(new Student { Name = name, Age = age, Group = group });
Console.WriteLine("Студент успешно добавлен.");
}
static void ShowAllStudents()
{
if (students.Count == 0)
{
Console.WriteLine("Список студентов пуст.");
return;
}
foreach (var student in students)
{
Console.WriteLine($"Имя: {student.Name}, Возраст: {student.Age}, Группа: {student.Group}");
}
}
static void SearchByGroup()
{
Console.Write("Введите группу для поиска: ");
string targetGroup = Console.ReadLine();
if (string.IsNullOrWhiteSpace(targetGroup))
{
Console.WriteLine("Группа не может быть пустой.");
return;
}
var found = students.Where(s => s.Group.Equals(targetGroup, StringComparison.OrdinalIgnoreCase)).ToList();
if (found.Count == 0)
{
Console.WriteLine("Студенты не найдены.");
}
else
{
Console.WriteLine("Найденные студенты:");
foreach (var student in found)
{
Console.WriteLine($"Имя: {student.Name}, Возраст: {student.Age}");
}
}
}
static void RemoveStudent()
{
Console.Write("Введите имя студента для удаления: ");
string nameToRemove = Console.ReadLine();
if (string.IsNullOrWhiteSpace(nameToRemove))
{
Console.WriteLine("Имя не может быть пустым.");
return;
}
var matches = students.Where(s => s.Name.Equals(nameToRemove, StringComparison.OrdinalIgnoreCase)).ToList();
if (matches.Count == 0)
{
Дополнительные задания для самостоятельной работы
- Объединить данные в класс
Student
- Добавить обработку исключений при вводе.
- Улучшить логику удаления и поиска.
- Сделать интерфейс более дружелюбным (например, вывод меню после каждого действия).
- Добавить возможность выхода из программы без ввода команды
(2) Кейс: "Сбой в системе сохранения данных"
Описание ситуации
Вы продолжаете работать над проектом «Система учёта студентов», который уже умеет добавлять, отображать, искать и удалять студентов. Теперь ваш руководитель поставил новую задачу — реализовать сохранение данных в файл , чтобы при перезапуске программы информация о студентах не исчезала.
Вам передан доработанный код из предыдущего кейса («Ошибка в системе учёта студентов»), и вы должны добавить функционал сохранения и загрузки данных из текстового файла students.txt
Разработчик, с которым вы работаете, уже попробовал реализовать это, но после тестирования начались проблемы:
- При запуске программы данные иногда дублируются.
- Иногда программа не может прочитать файл и падает с ошибкой.
- После нескольких запусков формат файла становится некорректным, и данные невозможно восстановить.
Предоставленный код для работы с файлом
static string filePath = "students.txt";
static void SaveToFile()
{
using (StreamWriter writer = new StreamWriter(filePath))
{
foreach (var student in students)
{
writer.WriteLine($"{student.Name},{student.Age},{student.Group}");
}
}
}
static void LoadFromFile()
{
if (File.Exists(filePath))
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] parts = line.Split(',');
students.Add(new Student
{
Name = parts[0],
Age = int.Parse(parts[1]),
Group = parts[2]
});
}
}
}
}
Анализ ситуации и выявление возможных причин
Проблема №1: Отсутствие обработки исключений при работе с файлом
Описание:
Если файл повреждён или защищён от чтения/записи, программа завершится с ошибкой.
Решение:
Добавить блок try-catch
вокруг операций чтения/записи.
Проблема №2: Некорректное разделение данных
Описание:
Если имя студента содержит запятые (например, "Иванов, Иван"), то метод Split(',')
разобьёт строку неверно.
Решение:
Использовать более надёжный формат сериализации, например JSON или CSV с экранированием.
Проблема №3: Дублирование данных при повторном запуске
Описание:
Если программа аварийно завершилась, старый файл остаётся, и при следующем запуске данные загружаются и снова записываются — возникает дублирование.
Решение:
Перезаписывать файл только при корректном завершении программы или использовать временный файл.
Проблема №4: Нет проверки на количество частей в строке
Описание:
Если файл был изменён вручную и одна из строк имеет меньше полей, произойдёт IndexOutOfRangeException
Решение:
Проверять длину массива parts
перед использованием.
Проблема №5: Нет контроля формата файла
Описание:
Если пользователь случайно отредактирует файл и нарушит формат, программа не сможет его прочитать.
Решение:
Валидировать каждую строку перед парсингом или использовать структурированный формат (например, JSON).
Предложенное решение: использование JSON для сериализации
using System.Text.Json;
static void SaveToFile()
{
try
{
string data = JsonSerializer.Serialize(students, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, data);
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при сохранении файла: {ex.Message}");
}
}
static void LoadFromFile()
{
try
{
if (File.Exists(filePath))
{
string data = File.ReadAllText(filePath);
students = JsonSerializer.Deserialize<List<Student>>(data) ?? new List<Student>();
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при загрузке файла: {ex.Message}");
students = new List<Student>();
}
}
Дополнительные задания для самостоятельной работы
- Напишите программу, которая выводит числа от 1 до 100. Но вместо чисел, кратных 3, программа должна выводить "Fizz", кратных 5 — "Buzz", а кратных и 3, и 5 — "FizzBuzz".
- Создайте программу, которая определяет, является ли число простым (делится только на 1 и само на себя).
- Реализуйте алгоритм бинарного поиска в отсортированном массиве.
- Напишите программу, которая принимает строку и проверяет, является ли она палиндромом (читается одинаково вперёд и назад).
Ролевая игра №1: "Стартап-Лаборатория"
Цель игры:
Погрузить учащихся в реалии разработки программного обеспечения в условиях стартапа. Развить навыки работы в команде, решения задач на C#, а также понимания жизненного цикла разработки приложения от идеи до MVP (минимально жизнеспособного продукта).
Формат игры:
- Продолжительность: 4–6 часов (можно разделить на несколько сессий).
- Формат: очный или онлайн.
- Участники: команда из 3–5 человек.
- Платформа: Visual Studio / VS Code + GitHub (или другая система контроля версий).
- Возрастная группа: школьники и студенты начального уровня.
Сеттинг:
Вы — молодые разработчики, которые собрались для участия в хакатоне под названием "TechStart 2025" . Задача: за ограниченное время создать минимально жизнеспособное приложение на C# по техническому заданию, которое вы получите в начале.
Каждый участник берёт на себя определённую роль в команде, выполняет свои задачи и взаимодействует с другими для достижения общей цели.
Роли в команде:
Этапы игры:
Этап 1: Брифинг и знакомство с задачей
- Командам выдается техническое задание (например: «Создайте консольное приложение "Телефонная книга" с возможностью добавления, поиска и удаления контактов» ).
- Обсуждение ролей и распределение обязанностей.
Этап 2: Проектирование архитектуры
- Создание структуры проекта.
- Определение классов, методов, типов данных.
- Выбор способа хранения данных (в памяти / файл).
Этап 3: Разработка MVP
- Каждый участник реализует свою часть функционала.
- Backend-разработчик создаёт основные классы и методы.
- Tester проверяет каждую реализованную функцию.
- Git Master управляет версиями кода и объединением изменений.
Этап 4: Тестирование и финальная доработка
- Все члены команды тестируют приложение.
- Исправляются найденные ошибки.
- Добавляется простой пользовательский интерфейс (меню, инструкции).
Этап 5: Защита проекта
- Команды демонстрируют своё приложение.
- Представляют, какие задачи были выполнены, какие сложности возникли.
- Получают обратную связь от преподавателя / ведущего.
Обучающие эффекты:
- Практическое применение знаний по C#.
- Написание структурированного и читаемого кода.
- Работа с классами, методами, коллекциями, файлами.
- Основы командной разработки и использования Git.
- Развитие soft skills: коммуникация, планирование, ответственность.
- Опыт решения задач в условиях ограниченного времени.
Возможные проблемы и вызовы во время игры:
Пример технического задания:
Название: Телефонная книга
Описание: Программа позволяет пользователю добавлять, просматривать, искать и удалять контакты.
Функционал:
- Добавление контакта (Имя, Телефон)
- Просмотр всех контактов
- Поиск по имени
- Удаление по имени
- Сохранение данных в файл
- Восстановление данных из файла
Интеллект-карта №1: «Путь новичка — от нуля до первого приложения»
Ветки:
- Основы программирования
- Переменные и типы данных
- Ввод/вывод (Console.WriteLine / ReadLine)
- Операторы сравнения и логические операторы
- Условные конструкции (if, else, switch)
- Работа с циклами
- for
- while
- do...while
- foreach
- Методы и функции
- Создание методов
- Параметры и возвращаемые значения
- Перегрузка методов
- Работа с массивами и строками
- Объявление и инициализация массивов
- Работа со строками
- Поиск и замена в строках
- Основы ООП
- Классы и объекты
- Конструкторы
- Свойства и поля
- Простые примеры наследования
- Итоговый проект: Консольное приложение
- Добавление функционала
- Тестирование
- Запуск и демонстрация
Интеллект-карта №2: «Инструменты и технологии бэкэнд-разработчика на C#»
Ветки:
- IDE и редакторы кода
- Visual Studio
- Visual Studio Code
- Rider
- .NET SDK и платформа
- Установка .NET
- Создание проектов
- Запуск и тестирование
- Язык C#
- Версии C# (C# 9, C# 10, C# 11)
- Современные фичи (record, top-level statements)
- Система контроля версий
- Git
- GitHub / GitLab
- Базовые команды (init, add, commit, push)
- Отладка и тестирование
- Использование точек останова
- Unit-тесты (NUnit, xUnit)
- Обработка исключений
- Дополнительные инструменты
- Postman (для API)
- Swagger / OpenAPI
- NuGet (библиотеки и зависимости)
Интеллект-карта №3: «Ключевые темы курса по уровням»
Ветки:
- Начальный уровень
- Основы синтаксиса C#
- Работа с данными и типами
- Условия и циклы
- Методы и массивы
- Основы ООП
- Первый проект: консольное приложение
- Средний уровень
- Работа с файлами и сериализацией
- Асинхронность (async/await)
- LINQ и коллекции
- Исключения и обработка ошибок
- Работа с базами данных (Entity Framework)
- Проект: API или простой сервис
- Профессиональный уровень
- Разработка REST API (ASP.NET Core)
- Работа с JWT и аутентификацией
- Архитектурные паттерны (MVC, Repository)
- Тестирование (xUnit, Moq)
- CI/CD и деплой
- Проект: полноценное backend-приложение с базой данных и API
1. Учебник: «C# 9.0. Полный справочник» — Герберт Шилдт
- Уровень: Начальный – средний
- Описание: Один из самых популярных учебников по языку C#. Содержит подробное описание синтаксиса, типов данных, ООП, работы с коллекциями и многопоточностью.
- Для кого: Для школьников, студентов и начинающих разработчиков.
- Применение в курсе: Базовый теоретический источник.
2. Учебное пособие: «Основы программирования на C#» — А. В. Соколов, И. В. Киреева
- Уровень: Начальный
- Описание: Практическое пособие с примерами кода, лабораторными работами и задачами. Подходит для обучения в образовательных учреждениях.
- Для кого: Для учащихся техникумов и младших курсов вузов.
- Применение в курсе: Дидактический материал, задания для практики.
3. Задачник: «Задачи по программированию на C#» — М. Е. Клепов
- Уровень: Начальный – средний
- Описание: Сборник задач с решениями по основам программирования на C#. Включает задачи по условным конструкциям, циклам, массивам, методам и работе с файлами.
- Для кого: Для самостоятельной практики и аудиторной работы.
- Применение в курсе: Тренировка навыков программирования, подготовка к практическим занятиям.
4. Методическое пособие: «Методика преподавания программирования на C# в школе» — под ред. Н. А. Семагина
- Уровень: Методический материал для преподавателей
- Описание: Руководство по организации учебного процесса при обучении программированию на C#. Включает рекомендации по планированию уроков, выбору задач и оценке знаний.
- Для кого: Преподаватели информатики, методисты, организаторы курсов.
- Применение в курсе: Создание эффективной программы и системы оценивания.
5. Хрестоматия: «Избранные фрагменты по истории развития C# и .NET» — сборник статей Microsoft и сообщества
- Уровень: Общее развитие
- Описание: Сборник официальных статей, интервью и заметок от Microsoft и сообщества разработчиков. Раскрывает историю создания C#, эволюцию языка и платформы .NET.
- Для кого: Все желающие углубиться в контекст и понять экосистему.
- Применение в курсе: Формирование системного мышления, развитие интереса к профессии.
-
C# с нуля: Первые шаги в разработку
Освой язык C# с самых основ: переменные, условия, циклы и первые программы. -
Программирование для школьников: C# за 8 недель
Идеальный старт для подростков, желающих создать своё первое приложение. -
Бэкэнд-старт: Основы C# и .NET для начинающих
Научись писать серверную логику, работать с данными и создавать API. -
Кодим на C#: От новичка до уверенного пользователя
Курс для тех, кто хочет понять, как работает настоящий код. -
Основы объектно-ориентированного программирования на C#
Познакомься с классами, объектами и принципами ООП. -
Разработка консольных приложений на C#
Создай несколько работающих приложений, от калькулятора до базы данных. -
C# для будущих IT-специалистов
Подготовка к профессии через практику и проекты. -
Шаг за шагом: Учимся программировать на C#
Последовательное освоение языка без пропущенных тем. -
Мир программирования: Введение в C# и .NET
Начни свой путь в мире разработки с одного из самых популярных языков. -
Юный разработчик: Программируем на C#
Для школьников 12+. Интересно, доступно, с играми и задачами. -
Бэкэнд-разработчик C#. Уровень 1: Начальный
Первый уровень обучения профессии бэкэнд-разработчика. -
Особый старт: C# для новичков без опыта
Никаких предварительных знаний — только практика и поддержка. -
Учимся думать как программист на C#
Фокус на развитие логики и алгоритмического мышления. -
От теории к практике: Программируем на C#
Теория + проекты = уверенность в своих силах. -
C# и Visual Studio: Работаем как настоящие разработчики
Изучи инструменты профессионалов и напиши первую программу. -
Старт в профессию: Бэкэнд на C#
Курс для тех, кто хочет построить карьеру в IT. -
Практический C#: Создание реальных приложений
Пиши полезные программы уже на первых занятиях. -
Мини-курс: Основы C# за месяц
Интенсив для тех, кто хочет быстро освоить язык. -
Программируй с нуля: C# для школьников и студентов
Обучение через интересные примеры и задания. -
C# для чайников: Понятно и просто
Объясняем сложное — простым языком. -
Введение в бэкэнд-разработку на C#
Пойми, как устроены серверы, API и логика работы сайтов. -
Создаём консольные приложения на C#
Практика через проекты: игры, системы учёта, калькуляторы. -
Программируй дома: Онлайн-курс по C# для начинающих
Гибкое обучение из любой точки мира. -
Будущее начинается с C#: Введение в разработку
Идеально для школьников и студентов, решивших связать жизнь с IT. -
C# — твой первый язык программирования
Выбери надежный стартовый путь в мир разработки
Нет элементов для просмотра