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

3.Что будет выведено на экран при выполнении приведенного ниже кода?

static void Main(string[] args)

{

char a = 'a';

int b = 0;

Console.WriteLine(true ? a : b);

}

Ответ: 97. Типы операндов не совпадают и компилятор приводит переменные к общему совместимому типу Int32.

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

1. Ключевое слово this

2. Прерывания циклов.

3. Что будет выведено на консоли?

public class A { public static int x = B.y + 1; }

public class B { public static int y = A.x + 1; }

static void Main(string[] args)

{

Console.WriteLine("A.x = " + A.x);

Console.WriteLine("B.y = " + B.y);

}

Ключевое слово this

Ссылается на текущий экземпляр объекта. Наиболее полезной функцией ключевого слова this является его способность передавать ссылку на текущий экземпляр объекта метода, как показано в следующем примере:

public void doSomething()

{

MyTargetClass myObj = new MyTargetClass ();

myObj.DoSomethingWith(this);

}

Прерывания циклов

1) break

2) continue

3) goto

4) return

Пример:

int i = 1;

while (i <= 10)

{

if (i == 6)

break;

Console.WriteLine("{0}", i++);

}

Что будет выведено на консоли?

Ответ: A.x = 2 B.y = 1. Тут все просто: вызывается конструктор A, затем конструктор B, но т.к. не определено значение A.x, то для используется 0 в конструкторе B.

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

1. CCR. Пояснение необходимости параллельной обработки данных

2. Производные классы

3. Какой метод выберет компилятор?

public class Test

{

public Test(object obj) { Console.WriteLine("object"); }

public Test(int[] obj) { Console.WriteLine("int[]"); }

}

public static void Main() { Test t = new Test(null); }

CCR. Пояснение необходимости параллельной обработки данных

Среда, в которой выполняется приложение в Microsoft Robotics Studio, носит название Runtime Environment. В основе Runtime лежит CLR 2.0, что дает возможность писать приложения, используя любые языки программирования платформы Microsoft .NET. Сам по себе Runtime состоит из двух ключевых технологий: Concurrency & Coordination Runtime (CCR) – это библиотека для работы с параллельными и асинхронными потоками данных, и Decentralized System Services (DSS) – средство создания распределенных приложений на основе сервисов.

Concurrency & Coordination Runtime

Программная логика робота – в отличие от традиционных приложений – должна взаимодействовать с гораздо более непредсказуемой окружающей средой и адекватно реагировать на информацию, поступающую от множества сенсоров одновременно. Более того, по многим причинам имеет смысл существенную часть логики перенести на множество взаимодействующих друг с другом компьютеров, которые физически могут находиться как на роботе, так и вне его. В результате требуется подход, который одинаково хорошо годился бы как для параллельных, так и для распределенных приложений. Библиотека Concurrency & Coordination Runtime и была специально разработана для того, чтобы упростить создание кода для параллельного исполнения и хорошего масштабирования на современных многоядерных процессорах.

Для ответа на вопрос «зачем нужна CCR» вспомним определение понятия «приложение» в контексте Robotics Studio: это композиция слабосвязанных параллельно выполняющихся компонентов. Такой подход можно было бы реализовать с помощью существующих примитивов многопоточного программирования. Однако процесс написания многопоточных приложений – далеко не тривиальная задача, и она становится все сложнее по мере роста числа одновременно выполняемых потоков.

При использовании CCR не требуется вручную управлять потоками, блокировками, семафорами, т. е. всеми стандартными примитивами синхронизации потоков. CCR – это не просто набор утилит, это совершенно другой подход к написанию кода. Этот подход основан на очередях сообщений и наборе зависящих от данных примитивов синхронизации. Потоки полностью скрыты от программиста, и Runtime – в зависимости от данных и от того, где они нужны, – решает, какой код и где будет исполняться. Поскольку синхронизация идет по данным, то не рекомендуется – и даже запрещается – использовать общую память (это может полностью нарушить схему работы кода).

Таким образом, библиотека CCR упрощает написание программ, которые работают со многими параллельными и асинхронными потоками данных. Примерами потоков данных могут служить сенсорная информация, её обработка и управление движением в роботах.

Производные классы

При применении наследования от базового класса важным становится вопрос о доступности членов. Приватные члены базового класса не являются доступными для производного класса, а общедоступные — являются. Однако общедоступные члены доступны как для производного класса, так и для внешнего кода. Поэтому если бы использовать можно было только два таких уровня доступности, создание члена, доступного как для базового, так и для производного класса, но не для внешнего кода, оказалось бы невозможным.

Для исключения вероятности возникновения подобной проблемы существует еще и третий уровень доступности — protected, при котором доступ к члену имеют только производные классы.

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

Какой метод выберет компилятор?

Int[]. Компилятор при определении вызова не использует текущее значение, а выбирает наиболее «специфический» конструктор. Нужно явно указать тип, если есть желание вызвать конструктор object: new Test((object)null);