- •Экзаменационный билет №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. Наследование классов. Синтаксис и общий смысл.
Наследование (inheritance) является одним из самых важных механизмов в ООП. Любой класс может наследоваться от другого класса, а это значит, что он будет иметь все те же члены, что и класс, от которого он унаследован. В терминологии ООП класс, от которого наследуется другой класс (или, другими словами, создается производный класс) называется родительским или базовым классом. Важно обратить внимание на то, что в С# напрямую наследоваться классы могут только от одного базового класса, хотя у базового класса может быть свой собственный базовый класс и т.д.
Механизм наследования позволяет расширять или создавать специфические классы от одного более общего базового класса. Например, возьмем класс, представляющий животное с фермы. Этот класс мог бы называться Animal и обладать методами вроде EatFood() или Breed(). От него можно было бы создать производный класс по имени Cow , который бы поддерживал все те же самые методы, но при этом также имел и свои собственные, например, Моо() и SupplyMilk(), а также еще один производный класс по имени Chicken с методами Cluck() и LayEgg()..
Наследование может задаваться в определении класса. Делается это добавлением после имени класса двоеточия со следующим за ним именем базового класса, как показано ниже:
public class MyClass : MyBase {
// Члены класса.
}
В определениях классов разрешено указывать только один базовый класс и в случае наследования от абстрактного класса нужно обязательно реализовать все наследуемые абстрактные члены (если только производный класс тоже не является абстрактным).
Компилятор не допускает, чтобы производный класс был более доступным, чем его базовый класс. Это означает, что внутренний класс может наследоваться от общедоступного класса, а вот общедоступный класс от внутреннего базового – нет. То есть следующий код является допустимым:
public class MyBase {
// Члены класса.
}
internal class MyClass : MyBase {
// Члены класса.
}
А приведенный ниже код скомпилировать не удастся:
internal class MyBase {
// Члены класса.
}
public class MyClass : MyBase {
// Члены класса.
}
Если базовый класс не используется, класс наследуется только от базового класса System.Object (который в С# имеет псевдоним object). В конечном счете, класс System.Object является корневым в иерархии наследования абсолютно всех классов.
3. Какой метод выберет компилятор?
class A { public void Test(int n) { Console.WriteLine("A"); } }
class B : A { public void Test(double n) { Console.WriteLine("B"); } }
static void Main(string[] args)
{
B b = new B();
b.Test(5);
}
Ответ: В. Приоритет отдается методу класса, по типу ссылки, если в нем определен метод с типами аргументов позволяющих выполнить преобразование без потерь.
Экзаменационный билет №8
1. Массивы. Строки. Потоки и файлы.
Массив – это проиндексированный список переменных, хранящихся в единственной переменной типа массива. Массивы имеют один единственный базовый тип, т.е. все отдельные вхождения в массиве относятся к одному и тому же типу.
Объявляются массивы следующим образом:
<базовый_тип> [] <имя>;
Массивы должны обязательно инициализироваться перед тем, как к ним можно будет получить доступ. Получать доступ к отдельным членам этого массива можно будет указанием их индекса в квадратных скобках:
<имя_массива>[<индекс>]
Инициализировать массив можно двумя способами: указанием всего содержимого массива в литеральной форме либо указанием размера массива и применением ключевого слова new для инициализации всех его элементов.
Спецификация массива с использованием литеральных значений подразумевает предоставление заключенного в фигурные скобки списка разделенных запятыми значений для элементов:
int [] myIntArray = {5, 9, 10, 2, 99};
Второй подход требует применения следующего синтаксиса:
int [] myIntArray = new int [5];
При желании оба подхода можно комбинировать:
int [] myIntArray = new int[5] {5, 9, 10, 2, 99};
Многомерным называется такой массив, в котором для получения доступа к элементам применяется несколько индексов.
<базовый_тип> [,] <имя>;
<базовый_тип> [, , , ] <имя>;
double[,] hillHeight = new double[3,4];
double [,] hillHeight = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}};
Многомерные массивы считаются прямоугольными, потому что каждая «строка» имеет одинаковый размер. Синтаксис для объявления массивов, состоящих из массивов, подразумевает указание в объявлении массива нескольких пар квадратных скобок:
int[][] jaggedIntArray;
jaggedIntArray = new int[3] [] {new int [] {1, 2, 3}, new int [] {1}, new int [] {1, 2}};
Манипулирование строками. Переменная типа string может восприниматься как доступный только для чтения массив переменных char. Это означает, что доступ к отдельным символам можно получать с использованием приблизительно такого синтаксиса:
string myString = "A string";
char myChar = myString [1];
Как и в случае массивов, получать информацию о количестве элементов в строке также можно с помощью myString.Length. Другие базовые приемы манипулирования строками подразумевают использование команд в формате, подобном <строка>.ToCharArray(). К числу наиболее простых, но полезных из них относятся команды <строка>.ToLower() и <строка>.ToUpper().Для удаления пробелов в начале и конце строки может использоваться команда <строка>.Trim().
Весь ввод и вывод в .NET Framework подразумевает использование потоков. Поток (stream) - это абстрактное представление последовательного устройства. Последовательное устройство (serial device) — это нечто такое, что хранит данные в линейной манере и точно таким же образом обеспечивает доступ к ним: по одному байту за раз. Это устройство может быть дисковым файлом, сетевым каналом, местом в памяти или любым другим объектом, поддерживающим чтение и запись в линейном режиме. Сохранение устройства абстрактным означает, что лежащие в основе источник/приемник данных могут быть скрыты. Такой уровень абстракции обеспечивает повторное использование кода и позволяет писать более обобщенные процедуры, потому что нет необходимости заботиться о действительной специфике передачи данных. Таким образом, исходный код может быть передан и повторно использован, когда приложение читает из входного файлового потока, сетевого входного потока или любого другого вида потока.
Существуют два типа потоков:
Выходные. Используются, когда данные пишутся в некоторое внешнее место назначения, которым может быть физический дисковый файл, местоположение в сети, принтер или другая программа.
Входные. Используются для чтения данных в память или переменные, к которым может обращаться ваша программа. Наиболее часто используемая форма входного потока - клавиатура. Концепции, применимые к чтению/записи дисковых файлов, применимы к большинству устройств.