- •Экзаменационный билет №1
- •1. Структура и принципы функционирования приложений на платформе .Net, библиотека компонентов и классов .Net Framework, исполнительная среде clr.
- •2. Интерфейсы. Стандартные интерфейсы .Net. Сравнение и клонирование объектов. Структуры. Делегаты. События.
- •3. Каков результат компиляции и выполнения приведенного ниже кода?
- •Экзаменационный билет №2
- •1. Основные понятия ооп - инкапсуляция, наследование, полиморфизм.
- •2. Отношение между объектами. Включения и коллекции.
- •3. Что будет выведено в результате выполнения цикла?
- •Экзаменационный билет №3
- •1. Класс Delegate. Логика использования делегатов. Неизменяемость делегатов.
- •2. Пространство имён – определение, примеры
- •3. Что будет выведено на экран в каждом из случаев, приведенных ниже:
- •Экзаменационный билет №4
- •1. Структура программы на c#. Константы. Переменные: описание, область действия, время жизни. Операции, приоритеты операций.Структура программы на c#.
- •2. Параллельные и Взаимосвязанные Вычисления (ccr). Где используется ccr?
- •3. Что будет выведено на экран в каждом из случаев, приведенных ниже:
- •Экзаменационный билет №5
- •1. Понятие полиморфизма
- •2. Перегрузка функций. Алгоритм выбора перегруженной функции.
- •3. Что будет выведено в консоли в результате выполнения следующего кода (и почему):
- •Экзаменационный билет №6
- •1. Конструкторы, их виды (преобразования, умолчания, копирования). Деструктор.
- •2. Обзор dss.
- •3. Какой метод выберет компилятор?
- •Экзаменационный билет №7
- •1. Информационные члены класса и члены-методы.
- •2. Наследование классов. Синтаксис и общий смысл.
- •3. Какой метод выберет компилятор?
- •Экзаменационный билет №8
- •1. Массивы. Строки. Потоки и файлы.
- •2. Ccr.Итераторы.
- •3. Что будет выведено в результате выполнения цикла?
- •Экзаменационный билет №9
- •1. Пространство имён – определение, примеры.
- •2. Циклы for, while, do. Прерывание циклов.
- •3. Что будет выведено в результате выполнения цикла?
- •Экзаменационный билет №10
- •1. Сокрытие методов базового класса.
- •2.Операции в c# (привести примеры операций для логических типов, арифметических и т.Д.)
- •3. Найти неправильное(ые) описание(я) двумерного массива
- •Экзаменационный билет №11
- •1. Конструкторы. Ключевое слово this.
- •2.Особенности итераторов в ccr. Итераторы
- •3.Найти неправильное(ые) описание(я) одномерного массива
- •Экзаменационный билет №12
- •1.Clr (CommonLanguageRuntime) – определение, примеры задач clr, состав ядра.
- •2.Понятие инкапсуляции.
- •3.Каков результат компиляции и выполнения приведенного ниже кода?
- •Экзаменационный билет №13
- •1.Статические члены класса
- •2.Что такое полиморфизм? Пример полиморфизма.
- •3.Что будет выведено на экран при выполнении приведенного ниже кода?
- •Экзаменационный билет №14
- •1.Понятие класса. Доступ к членам класса.
- •2. Инкапсуляция. Понятие класса как абстрактного типа данных.
- •3.Как метод выберет компилятор?
- •Экзаменационный билет №15
- •1. Понятие события
- •2. Механизмы инкапсуляции в c#. Вложенные типы.
- •3. Каков результат компиляции и выполнения приведенного ниже кода?
- •Экзаменационный билет №16
- •1.Определение классов в с#. Ключевые слова internal, public, abstract
- •2.Потоковый ввод-вывод. Работа с файлами/каталогами
- •3. Какой метод выберет компилятор?
- •Экзаменационный билет №17
- •1. Интерфейсы
- •2.Параллельные и Взаимосвязанные Вычисления (ccr). Где используется ccr?
- •3.Что следует ожидать на экране?
- •Экзаменационный билет №18
- •1.Ссылочные типы и типы-значения
- •2.Класс Delegate. Логика использования делегатов. Неизменяемость делегатов.
- •3.Что будет выведено в результате выполнения цикла?
- •Экзаменационный билет №19
- •1.Clr (CommonLanguageRuntime) – определение, примеры задач clr, состав ядра
- •2.Зачем нужны частичные(partial) методы в c#?
- •3.Что будет выведено в консоли в результате выполнения следующего кода (и почему):
- •Экзаменационный билет №20
- •1.Простые типы. Примеры.
- •2.Ссылочный тип данных
- •3.Что будут выведено на экран в результате выполнения кода приведенного ниже?
- •Экзаменационный билет №21
- •1.Переменные. Объявление и инициализация
- •2.Наследование. Замещение методов. Проверка совместимости типов.
- •3.Что будет выведено в результате выполнения цикла?
- •Экзаменационный билет №22
- •1.Определение классов в с#. Ключевые слова internal, public, abstract
- •2.Библиотеки и типы, используемые при симуляции в Robotics
- •3.Что будет выведено на экран при выполнении приведенного ниже кода?
- •Экзаменационный билет №23
- •Экзаменационный билет №24
- •Экзаменационный билет №25
2.Особенности итераторов в ccr. Итераторы
Ключевое понятие для CCR – итератор, который допускает последовательное выполнение кода без блокировки выполняющегося потока, в случае если итератор ожидает получения сообщения. Когда действие должно быть выполнено, что должно занять неопределенное количество времени, итератор запоминает текущую позицию в коде, и затем отдаёт управление, до тех пор, пока не будет получено сообщение. После получения сообщения код продолжает выполнение из точки, где он был прерван.
Итераторы были представлены C# в версии 2.0, для поддержки foreach итераций, без необходимости реализации интерфейса IEnumerable. Каждый вызов итератора выполняет возвращение очередной величины в последовательности с использованием оператора yield return или завершение итерации с использованием yield break.
CCR использует итераторы, обрабатывающие последовательности задач, позволяя писать код, который выглядит похожим на последовательно выполняющийся, но в действительности представляющий собой последовательность асинхронных шагов. Итератор объявляется как метод типа IEnumerator <ITask>, что означает, что он будет взаимодействовать с задачами. Компилятор также допускает, что этот тип методов может содержать yield break и yield return утверждения, которые не могут быть использованы в обычном коде.
В случае IEnumerator <ITask> функция объявляется как перечислитель, который возвращает объекты типа <ITask>. Также могут быть созданы перечислители, которые возвращают различные типы, но задачи должны использоваться только в MRDS.
Итератор обозначается как метод типа IEnumerator<ITask>, что означает итерирование по задачам. Итераторы позволяют последовательно выполнять код без блокировки потока при ожидании сообщения. Когда операция будет завершена за неизвестное количество времени, итератор запоминает текущую позицию выполнения кода и оставляет управление до получения сообщения. В CCR итераторы основаны на последовательности задач, что позволяет писать код, который выглядит как последовательный, а в действительности представляет собой серию асинхронных шагов.
Создание итератора. Создадим метод со следующей сигнатурой:
public static IEnumerator<ITask> MyIterator()
//Создадим два порта принимающих значения int, используя следующее определение:
Port<int> p1 = new Port<int>();
//Пошлем на порт 1 значение 0
p1.Post(0);
//Введем булевскую переменную обозначающую конец цикла
bool done = false;
//Создадим цикл while (!done), в котором получатель сообщения одного порта посылает сообщение другому, испльзуя анонимный делегат
yield return Arbiter.Receive(false, p1, delegate(int i)
{
Console.WriteLine("P1 Thread {0}: {1}", Thread.CurrentThread.ManagedThreadId,i);
p2.Post(i + 1);
}
);
//Аналогично, задаим обработку сообщения на втором порту
yield return Arbiter.Receive(false, p2, delegate(int i)
{
Console.WriteLine("P2 Thread {0}: {1}", Thread.CurrentThread.ManagedThreadId,i);
if (i >= 10) done = true;
else p1.Post(i + 1);
}
);
Запуск итератора.
void RunFromIterator()
{
Dispatcher d = new Dispatcher(4, "Test Pool");
DispatcherQueue taskQ = new DispatcherQueue("Test Queue", d);
Console.WriteLine("Before Iterator submitted - thread {0}",
Thread.CurrentThread.ManagedThreadId);
Arbiter.Activate(taskQ,
Arbiter.FromIteratorHandler(IteratorExample),
Arbiter.FromIteratorHandler(IteratorExample));
Console.WriteLine("After Iterator submitted - thread {0}",
Thread.CurrentThread.ManagedThreadId);
}