1. Основы C# Flashcards
Что такое тип переменной?
Тип определяет множество допустимых значений переменной и формат хранения значения этого типа в памяти.
Как преобразовать строковое представление числа в double?
double.Parse или Convert.ToDouble или double.TryParse
3/2+1.5
2.5 (деление целочисленное!)
Math.Round(5)/2 + 3.5
6.0 (Math.Round возвращает double!)
Что такое метод?
Аналог функции в математике. Именованная последовательность инструкций, с входными параметрами и, возможно, с возвращаемым результатом.
Что такое var? Корректна ли следующая запись? var a;
Ключевое слово, заменяющее тип при объявлении переменной. Заставляет компилятор определить наиболее подходящий тип на основании анализа выражения справа от знака присваивания. var a = new int[5]; полностью эквивалентно int[] a = new int [5]; Если справа нет значения, то компилятор не сможет вывести тип var и выдаст ошибку компиляции.
Как прочитать целое число из консоли?
Console.ReadLine, а затем int.Parse. Или посимвольное чтение с помощью Console.Read, а затем int.Parse
Пусть n и m имеют тип int и n < m. Возможно ли, что m*m < n?
Возможно, если случилось арифметическое переполнение при умножении. Для этого достаточно, достаточно, чтобы m*m было больше int.Max — максимального числа, которое представимо типом int
Пусть a и b имеют тип double. Какие значения может принимать следующее выражение? (a + b)(a + b) == aa + 2ab + b*b
и true и false. false, если в результате арифметических операций над типом double накопилась погрешность. Погрешность появляется из-за того, что double может принимать лишь ограниченное количество значений, а действительных чисел бесконечно много. Поэтому из-за порядка вычисления операций результат может отличаться.
Какие типы ошибок могут возникать в процессе разработки программы?
В курсе явно указывались ошибки компиляции, времени выполнения, стилистические. К этому можно добавить ошибки в алгоритмах и ошибки проектирования
Когда стоит использовать enum?
Когда нужна переменная с конечным небольшим количеством значений, каждому из которых можно дать своё имя.
Что может находиться внутри круглых скобок выражения if?
Любое выражение с типом bool
Для чего применяется слово default в выражении switch?
Чтобы указать инструкции, которые надо выполнить, если ни один из case не подошел.
Когда целесообразно использовать for, а когда foreach для перебора всех элементов коллекции?
for если нужен индекс. Иначе foreach
Что делает break в цикле?
Выходит из текущего цикла. С случае нескольких вложенных циклов — только из внутреннего
Что делает continue в цикле?
Переходит к следующей итерации текущего цикла.
Как сделать бесконечный цикл на for?
for ( ; ; ){ … }
Как получить последний элемент в массиве?
Использовать длину массива xs[xs.Length - 1]
Чему равно выражение new int[] { 1, 2, 3 } == new int[] { 1, 2, 3 }
false. Массивы сравниваются по ссылкам. Здесь массивы — это 2 разных объекта, поэтому ссылки не будут равны.
Какое значение получить быстрее в массиве из 1000 элементов values[0] или values[999]
Одинаково. Индекс всего лишь означает сдвиг адреса, из которого будет прочитано значение.
Где хранится строка? В куче или на стеке?
В куче. Как правило все значения, которые могут занимать значительный объем данных (строки, массивы) хранятся в куче, а не на стеке.
В чем ошибка? Как исправить?File.ReadAllLines(“C:\Users\user123\document.txt”)
Слеши считаются спец-символами экранирования. Либо их нужно экранировать (удвоить) “C:\Users\user123\document.txt”, либо использовать “дословный” формат строки @”C:\Users\user123\document.txt”
Чем отличается массив от списка (List)?
У массива фиксирована длина — она задаётся при создании массива и её нельзя поменять. Список увеличивает свою длину по мере необходимости. В отличие от массива у него есть метод Add(item)
В каких случаях нужно использовать StringBuilder?
Когда надо собрать длинную строчку из большого числа маленьких. Например, из массива строк.
Другие способы эффективно собрать строку из нескольких маленьких: string.Concat, string.Join и string.Format
Что общего у StringBuilder и List?
Оба выделяют память с запасом и динамически увеличивают свой размер по мере добавления новых данных. Оба предоставляют методы для добавления, удаления и модификации содержимого.
Что такое автоматическое тестирование?
Процесс, когда корректность одной программы проверяется другой программой, путём запуска тестируемой программы в разных ситуациях и сравнения ее результата с эталоном.
Как создать библиотеку в C#?
Создать отдельный проект и указать у него тип Class Library
Как бороться с дублирование кода в тестах?
Выделить специальный метод, который в параметрах принимает данные и ожидаемый результат, а внутри делает проверку. В тестах использовать его
Что такое покрытие тестами?
Доля строк кода тестируемой программы, выполненных при запуске комплекта тестов
В классе объявлены следующие поля, но нигде нет кода инициализации полей. Какие значения лежат в полях в этом случае? string a; int b; int[] xs; bool f; А если бы это были не поля класса, а переменные внутри метода?
Поля классов автоматически инициализируются значениями по умолчанию. string a == null, int b == 0, int[] xs == null, bool f == false.
Переменные в отличие от полей не инициализируются значениями по умолчанию. Их нельзя использовать до инициализации и за этим следит компилятор
Когда следует выделять метод?
Если метод слишком длинный, его стоит разбить на логические этапа, выделяя их в методы. Когда одна последовательность инструкций повторяется несколько раз, с небольшими вариациями стоить выделить ее в метод (DRY). Если метод делает несколько различных дел одновременно, стоит их разнести по разным методам.
Как создать заглушку метода (stub)?
Надо написать сигнатуру метода, а внутри выкинуть NotImplementedException
Что может находиться в:
1-ой секции for?
2-ой секции for?
3-ой секции for?
В 1-ей секции for: Декларация либо присваивание значений нескольким переменным одного типа.
Во 2-ой секции for: Условие: любое выражение, возвращающее bool.
В 3-ей секции for: Выражения, разделенные запятой. Например, использование операторов или вызов методов.
Перепишите for с помощью цикла while: for (var i = 0; i < 10; i += 2) {}
{ var i = 0; while(i < 10) { i += 2; } }