
- •Вопрос 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.
Вопрос 9 Виртуальные функции virtual. Вызов базовых версий функций base.
Объявляя функцию базового класса как virtual, тем самым вы позволяете ее переопределять в классах-наследниках:
Допускается объявление свойства как virtual. Для виртуального или переменного свойства используется такой же синтаксис, что и для невиртуального за исключением ключевого слова virtual, добавляемого к определению.
Для простоты далее речь пойдет в основном о методах, хотя все это касается также свойств. Концепция лежащая в основе виртуальных функций С#, идентична стандартной концепции объектно-ориентированного программирования (ООП). Вы можете переопределить виртуальную функцию в классе-наследнике, и когда этот метод буде-вызван, то запустится его версия, относящаяся к соответствующему типу объекта. С# по умолчанию функции не виртуальные, но (в отличие от конструкторов) могут быть явно объявлены как virtual. Это следует методологии C++: по причинам производительности функции не виртуальные, если это не указано явно. В отличие от этого, в Java все функции виртуальные. С# имеет отличающийся от C++ синтаксис поскольку требует явного объявления, когда функция класса-наследника переопределяет другую функцию, с помощью ключевого слова overridde.
Этот синтаксис переопределения метода исключает потенциальные ошибки времени выполнения, которые могут легко возникать в C++, когда сигнатура метода в классе-наследнике нечаянно оказывается отличной от базовой версии, в результате чего метод наследника не может переопределить базовый. В С# это всплывает в виде ошибки компиляции, поскольку компилятор легко обнаруживает метод, для которого указан модификатор override, но при этом не имеющий базового метода, который он переопределяет.
Ни поля-члены, ни статические функции не могут быть объявлены виртуальными. Эта концепция просто не имеет смысла ни для каких членов класса, за исключением функций-членов уровня экземпляра.
Синтаксический блок ::=
class <Идентификатор_базового_класса>
{
…
<Спецификатор_доступности> virtual <Тип__возвр_знач> <Идентификатор_метода> ([<Список_формальных параметров>])
{
< Операторы >
}
}
class <Идентификатор_производного_класса>
{
<Спецификатор_доступности> override <Тип_возвр_знач>
<Идентификатор_метода> ([<Список_формальных_парам>])
{
< Операторы >
}
…
}
<Спецификатор_доступности>::=
public
protected
internal
protected internal
Примечания.
Виртуальный метод не может быть объявлен как private.
Если метод в производном классе переопределяет метод базового класса, он должен иметь то же имя и параметры (число и последовательность типов должны совпадать), что и метод базового класса.
Переопределяющий метод должен иметь тот же спецификатор доступности и тип возвращаемого значения, что и переопределяемый метод базового класса.
Кроме нестатических методов, как virtual могут быть объявлены только нестатические свойства и нестатические индексаторы. Никакие другие функции-члены не могут быть виртуальными, а, значит, не могут быть переопределены.