
- •Вопрос 1 Классы обзор элементов класса.
- •Обзор элементов класса.
- •Вопрос 2 Методы. Синтаксический блок. Ссылочные параметры ref и out
- •Объявление методов
- •Возврат из метода и возврат значения
- •Вопрос 3 Перегрузка методов. Перегрузка методов. Вызов методов с одинаковым именем и разными аргументами
- •Вопрос 4 Переменное число аргументов метода params. Переменное число аргументов метода
- •Вопрос 5 Ссылочные параметры ref и out сравнительный анализ.
- •Вопрос 6 Конструкторы. Виды конструкторов, области применения, синтаксический блок.
- •Вызов конструктора экземпляра
- •Закрытые конструкторы экземпляра
- •Статические конструкторы
- •Конструкторы структур
- •Вопрос 7 Свойства. Область применения. Синтаксический блок.
- •Вопрос 8 Наследование. Предпосылки появления. Типы наследования. Синтаксический блок.
- •Вопрос 9 Виртуальные функции virtual. Вызов базовых версий функций base.
- •Вызов базовых версий функций
- •Вопрос 10 Наследование. Динамическое связывание.
- •Вопрос 11 Абстрактные методы. Особенности применения. Синтаксический блок
- •Абстрактный метод в c#
- •Вопрос 12 Абстрактные классы. Синтаксический блок. Особенности.
- •Вопрос 13 Полиморфизм как концепция ооп.
- •Вопрос 14 Потеря и восстановление информации о типе. Операторы is и as.
- •Вопрос 15 Множественное наследование. Интерфейсы область применения. Синтаксический блок.
- •Вопрос 16 Делегаты. Область применения. Синтаксический блок.
- •Вопрос 17 Групповые делегаты. Область применения. Особенности синтаксиса.
- •Вопрос 18 События. Область применения. Синтаксический блок.
- •Вопрос 19 Исключения. Область применения синтаксический блок.
- •Вопрос 20 Потоки данных и файловый ввод-вывод. Виды файлов.
- •Вопрос 21 Класс fileinfo. Обзор элементов класса.
- •Вопрос 22 Классы StreamReader и StreamWriter. Обзор элементов класса.
- •Вопрос 23 Класс List. Особенности применения. Методы и свойства класса.
- •Вопрос 24 Класс StringBuilder. Особенности применения и методы.
- •Вопрос 25 Бинарный ввод и вывод при помощи класса FileStream.
- •Вопрос 26 Форма как базовый элемент графического интерфейса. Заголовок, первоначальное размещение, свойства BackColor, ForeColor, Font; Cursor; BackGroundImage.
- •Вопрос 27 Форма как базовый элемент графического интерфейса. Рамка для формы. Кнопки изменения размеров формы. Прозрачность.
- •Вопрос 28 Передача фокуса ввода на форме. Свойства TabStop TabIndex.
- •Вопрос 29 Текстовые поля. Элемент управления Label и TextBox. Сравнительный анализ.
- •Вопрос 30 Элемент управления MenuStrip.
- •Вопрос 33
- •Вопрос 35 Элементы управления NumericUpDown и DomainUpDown характеристика и сравнительный анализ.
- •Вопрос 36 Вложенные элементы управления(контейнеры) TabControl и GroupBox. Применение элементов управления GroupBox и Panel
- •Применение элемента управления TabControl
- •Вопрос 37 Стыковка и фиксация элементов управления. Свойства Anchor и Dock.
- •Вопрос 38 Методы формы. Show, ShowDialog, Activate, Hide, Close. Методы Show и ShowDialog
- •Метод Activate
- •Метод Hide
- •Метод Close
- •Вопрос 42 Оповещение пользователя об ошибках ввода ErrorProvider.
Вопрос 15 Множественное наследование. Интерфейсы область применения. Синтаксический блок.
Некоторые языки, такие как C++, поддерживают то, что известно под названием множественного наследования, когда класс происходит более чем от одного базового класса. Преимущества множественного наследования спорны. С одной стороны, нет сомнений, что можно применять множественное наследование для написания сложного, но при этом компактного кода. С другой стороны, код, использующий множественное наследование, часто сложно понять и сложно отлаживать. Как уже упоминалось, облегчение написания устойчивого кода было одной из ключевой целей проектирования С#. Соответственно, поэтому С# не поддерживает множественного наследования. Однако он позволяет типу наследовать множество интерфейсов. Это значит, что класс С# может наследоваться от другого класса и любого количества интерфейсов. На самом деле можно сказать точнее: благодаря налию System.Object как всеобщего базового типа, каждый класс С# (за исключением Object) имеет исключительно один базовый класс и дополнительно может иметь любое количество базовых интерфейсов.
Ранее была описана разница между структурами (типами значений) и классам (ссылочными типами). Одним из ограничений, налагаемых на структуры, является то, что они не поддерживают наследования, несмотря на тот факт, что каждая структура автоматически наследуется от System. ValueType. Структуры не поддерживают наследование реализации, но поддерживают наследование интерфейса. Таким образом, мы можем подытожить ситуацию с пользовательских типами следующим образом:
Структуры всегда наследуются от System.ValueType. Они могут также наследовать любое количество интерфейсов.
Классы всегда наследуются от одного класса по нашему выбору. Они также могут наследовать любое количество интерфейсов.
Интерфейсы синтаксически подобны абстрактным классам. Он определяет, что должно быть сделано, но не уточняет как. Интерфейс объявляется с помощью ключевого слова interface
Упрощенная форма объявления:
Interface имя { тип_возврата имя_метода1 (список_параметров);
Тип_возврата имя_метода2(список_параметров);
.. }
Вопрос 16 Делегаты. Область применения. Синтаксический блок.
Применение делегата аналогично применению абстрактного метода, он определяет тип возвращаемого значения, его формальные параметры, но не определяет заму реализацию. Один и тот же делегат может определять различные пути реализации метода во время исполнения. Однако, необходимо помнить, что эти методы должны иметь аналогичные: тип возвращаемого значения, и формальные параметры, что и в делегате. Во время исполнения делегату присваивается подходящий метод, затем метод инкапсулируется и когда происходит вызов делегата, управление передается (делегируется) непосредственно инкапсулированному методу.
Применение делегат полезно в том случае, если во время написания кода известно, что действие должно произойти в определенной точке кода, но сам путь реализации его еще не известен.
Делегат является классом, а слеовательно ссылочным типом. Он происходит от базового класса System.Delegate.
Синтаксический блок делегата имеет вид.
Определение_делегата::=
[<Спецификатор_доступности>] delegate <Тип_возвращаемого_заначения> <Идентификатор>([<Список_формальных_параметров>])
Стоит отдельно отметить, что описание делегата может производиться там же где и описание классов. Для делегатов применяются спецификаторы доступности аналогичные тем, что используются для классов.
Важно понимать, что во время выполнения программы один и тот же делегат можно использовать для вызова различных методов, просто заменив метод, на который ссылается этот делегат. Таким образом, метод, который будет вызван делегатом, определяется не в период компиляции программы, а во время ее работы. В этом и состоит достоинство делегата.
Пример, написать программу для работы со строками со следующими методами: замена пробелов подчеркиваниями, удаление пробелов, реверсирование строки.
Интерфейс как раз и нужен, чтобы создать определенный "шаблон", который обязывает классы наследники предоставлять определенные методы. Для примера, если взять интерфейс "автомобиль", а в нем метод "запустить двигатель", то из этого следует, что для любого автомобиля можно "запустить двигатель". А как это будет сделано, зависит от конкретной реализации: кнопочку нажать, как на спорткаре, ключ повернуть, как на большинстве, или толкать с мужиками, как на старом москвиченке. Абстрактный класс не выход, так как в С# нет множественного наследования.