Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен в гаи redacted.doc
Скачиваний:
5
Добавлен:
27.09.2019
Размер:
676.35 Кб
Скачать

3.Что будет выведено в результате выполнения цикла?

float begin = 1000000000;

int counter = 0;

for (float i = begin; i < (begin + 10); i++)

counter++;

Console.WriteLine(counter);

Ответ: бесконечный цикл.

Оригинальное обоснование: Для таких больших значений float нет разницы между begin+1 и begin+10.

Альтернативное обоснование: Если более корректно, то в данном случае при операции инкремента идет потеря значимости числа, т.к. точность представления для типа float 7 знаков. Но тогда возникает резонный вопрос, а почему нет потери значимости в выражении (begin+10), ведь цикл то выполняется? А ее нет там потому, что компилятор с какого-то перепугу приводит это выражение к типу System.Int64(System.Int64.MaxValue = 9223372036854775807) и только потом выполняет операцию сравнения, т.е. потери значимости здесь не происходит.

Экзаменационный билет №19

1.Clr (CommonLanguageRuntime) – определение, примеры задач clr, состав ядра

CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина – управляемая операционная система высокого уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:

1) управление кодом (загрузку и выполнение),

2) управление памятью при размещении объектов,

3) изоляцию памяти приложений,

4) проверку безопасности кода,

И др.

CLR состоит из двух компонент: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll).

2.Зачем нужны частичные(partial) методы в c#?

Идея в том, чтобы отделить реализацию метода от его объявления. Частичные методы объявляются в каком-то частичном типе, без тела, и реализуются (не обязательно!) в другом месте. Это дает возможность определить (но не востребовать) дополнительные методы класса.

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

3.Что будет выведено в консоли в результате выполнения следующего кода (и почему):

byte b1 = 1, b2 = 2;

byte b3 =(byte)(b1 + b2);

if (b3 > b1)

Console.WriteLine("OK!");

else

Console.WriteLine("wow!");

Ответ: ОК! 3>1 все логично, черт возьми.

Экзаменационный билет №20

1.Простые типы. Примеры.

Простые типы – это типы, имя и основные свойства которых известны компилятору. Относительно встроенных типов компилятору не требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно. К простым типам относятся: целочисленные, вещественные, decimal, логический. Все простые типы — встроенные в язык C# — являются псевдонимами системных типов .NET Framework. Например, int является псевдонимом для System.Int32. Простые типы можно инициализировать с помощью литералов. Например, "A" — это литерал типа char, а 2001 — литерал типа int.

2.Ссылочный тип данных

Данные в С# сохраняются в переменной одним из двух способов, который зависит от типа переменной. Этот тип относится к одной из двух категорий: ссылка или зна­чение. Отличия описаны ниже.

- Типы-значения хранят себя и свое содержимое в одном месте в памяти.

- Ссылочные типы хранят ссылку на другое место в памяти (называемое кучей), в котором уже и непосредственно хранится их содержимое.

Данные в С# сохраняются в переменной одним из двух способов, который зависит от типа переменной. Этот тип относится к одной из двух категорий: ссылка или зна­чение. Отличия описаны ниже.

  • Типы-значения хранят себя и свое содержимое в одном месте в памяти.

  • Ссылочные типы хранят ссылку на другое место в памяти (называемое кучей), в котором уже и непосредственно хранится их содержимое.

На самом деле чрезмерно беспокоиться об этом при использовании С# не нужно. Пока что в этой книге переменные string (которые относятся к ссылочным типам) и другие простые переменные (большинство из которых относится к типам-значениям, как, например, переменные int) применялись практически одинаково.

Одно из главных отличий между типами-значениями и ссылочными типами со­стоит в том, что типы-значения всегда содержат значения, в то время как ссылоч­ные типы могут быть нулевыми (null), т.е. не содержать вообще никакого значения. Существует, однако, возможность создавать тип-значение, ведущий себя в этом отно­шении подобно ссылочному типу (содержать null), путем использования допускающих null типов, которые являются разновидностью обобщений (generics).

Единственными простыми типами, которые представляют собой ссылочные типы, являются string и object, хотя массивы неявно тоже являются ссылочными типами. Каждый создаваемый класс будет представлять собой ссылочный тип, поэтому здесь основной акцент будет делаться именно на них.