Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Answers_new_v_2_0-1(1).doc
Скачиваний:
22
Добавлен:
09.08.2019
Размер:
147.46 Кб
Скачать
  1. Операции в выражениях, приоритет операций. Операции sizeof и typeof. Операция new.

  2. Методы арифметических классов. Операции сдвига.

  3. Логические операции, условные выражения. Операции проверки типа и приведения к типу. Полный.

Логическая операция — в программировании операция над выражениями логического (булевского) типа, соответствующая некоторой операции над высказываниями в алгебре логики. Как и высказывания, логические выражения могут принимать одно из двух истинностных значений — «истинно» или «ложно».

Логические операции служат для получения сложных логических выражений из более простых. В свою очередь, логические выражения обычно используются как условия для управления последовательностью выполнения программы.

Среди логических операций наиболее известны конъюнкция (&&), дизъюнкция (||), отрицание (!).

Операции проверки типа и приведения к типу: is и as.

Проверка типа через приведение утомительна и неэффективна, к тому же возможно возникновение исключения во время выполнения программы. По этой причине в С# предусмотрены операции, которые приходят на помощь в таких ситуациях и применение которых гарантированно не приведет к исключениям.

Операция is дает в результате булевское значение, говорящее о том, можно ли преобразовать данное выражение в указанный тип, как с помощью преобразования ссылки, так и посредством операций упаковки и распаковки.

Как уже упоминалось, операция is принимает во внимание только преобразования ссылок. Это значит, что она не может проверять определенные пользователем преобразования, имеющиеся в типах.

Операция as подобна is за исключением того, что она возвращает ссылку на целевой тип. Поскольку гарантируется, что она никогда не сгенерирует исключения, то если данное преобразование невозможно, просто возвращается null-ссылка. Подобно is, операция as принимает во внимание только преобразования ссылок или преобразования с упаковкой / распаковкой.

Иногда требуется проверить, относится ли переменная к определенному типу, и если да, то выполнить какую-то операцию над нужным типом. Проверить переменную на принадлежность к типу можно с использованием операции is, а затем, если она вернет true, привести переменную к этому типу. Однако это будет не эффективно.

Более удачный подход заключается в том, чтобы следовать идиоме применения операции as для получения ссылки на переменную с нужным типом, а затем проверить ее на неравенство null, что будет означать успешность преобразования.

Таким образом, потребуется выполнить только одну операцию просмотра типа вместо двух.

  1. Составные типы данных, массивы, списки. Многомерные и вложенные (jagged) массивы. Класс Array. Семантика присваивания массивов.

  1. Строки постоянной длины (string и String) и построитель строк (StringBuilder). Операции над строками.

  2. Структуры (struct) и перечисления (enum). Отличия структур от классов. Полный.

Структура — конструкция, позволяющая объединять данные разных типов.

Стек — структура данных, в которой обращение к данным и добавление их происходит последовательно. То есть, чтобы обратиться к нижнему элементу, нужно удалить все элементы над ним.

Отличия структур от классов в разных языках разнятся. Отличия для языка С#:

  • Размещение — в области стека.

  • Копирование — создаётся отдельная копия объекта, которая после копирования живёт «своей жизнью».

  • Наследование — не разрешается дополнение своими свойствами; от него нельзя наследовать.

  • Передача параметров — как локальные копии переменных (в классах — как ссылки).

  • Невозможно создание конструктора по умолчанию — без параметров (в классах — без ограничений).

  • Освобождение переменной — при выходе за пределы её видимости (в классах — во время сборки мусора).

enum — отдельный тип, состоящий из набора именованных констант (список перечислителя).

Обычно лучше всего определять перечисление прямо в пространстве имен, чтобы всем классам в пространстве имен было одинаково удобно получить к нему доступ. Однако перечисление также может быть вложено в классе или структуре.

По умолчанию первому перечислителю задано значение, равное нулю, а значение каждого последующего оператора увеличивается на 1..