- •1. Эволюция языков программирования. Что такое net?
- •Internet и появление языка Java.
- •2.Компоненты платформы net.
- •3.Модель выполнения приложения в среде .Net Framework. Промежуточный язык Microsoft (Microsoft Intermediate Language, msil). Сборки.
- •4. Обзор встроенных типов данных c#. Применение встроенной функциональности типов данных.
- •5.Операции ввода/вывода. Формат вывода. Пространство имён System. Класс System.Math.
- •6.Операции, операторы и выражения в c# .
- •Операторы
- •7. Массивы в c# (одномерные и двумерные). Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.
- •8. Структуры в c#, создание структуры.
- •9. Понятие объектно-ориентированного программирования.
- •10. Классы в c#. Члены класса: методы, поля, свойства и события. Форма определения класса.
- •11. Типы значений и ссылочные типы. Динамическое использование памяти: стеки и кучи. Упаковка и распаковка.
- •12. Конструкторы и деструкторы. Сборка «мусора».
- •13. Определение пользовательских методов класса. Модификаторы доступа к методам класса. Параметры методов класса, передача аргументов. Модификаторы ref, out, params параметров методов.
- •14. Возвращение методами объектов класса. Возвращение методами массивов.
- •15. Общие (статические) члены класса. Доступ к общим членам. Ограничения на static-методы.
- •Ограничения на static-методы.
- •16.Область видимости и время существования переменных. Преобразование и приведение типов.
- •17.Обработка исключительных ситуаций.
- •18.Перегрузка методов. Перегрузка конструкторов.
- •19.Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений.
- •20. Инкапсуляция и свойства. Формат записи свойств.
- •21.Индексаторы. Специальные приемы построения типов. Создание одномерного индексатора.
- •22.Создание двумерного индексатора.
- •23.Механизмы реализации инкапсуляции в c#.
- •24.Базовые классы и наследование. Доступы к членам классов.
- •25.Конструкторы и наследование.
- •26.Ссылки на базовый класс и объекты производных классов.
- •27.Виртуальные методы и их переопределение.
- •28.Использование абстрактных классов.
- •29.Механизмы реализации полиморфизма в c#.
- •30.Интерфейсы. Реализация интерфейсов. Стандартные интерфейсы среды .Net Framework.
- •31.Коллекции. Классы коллекций общего назначения.
- •32.Делегаты. Назначение делегатов. Многоадресатная передача.
- •33.События. Объявление и генерация событий. Реализация обработчиков событий
- •34.Обзор технологий программирования Windows-приложений.
- •35.Архитектура Windows Forms. Класс Form.
- •36.Элементы управления формы
27.Виртуальные методы и их переопределение.
Виртуальным наз.метод, объявленный с помощью слова virtual в базовом классе и переопределяемый в одном или нескольких производных классах. Каждый производный класс может иметь свою собственную версию реализации виртуального метода. Именно ч-з ссылку на базовый класс будет вызываться необходимая версия виртуального метода. По типу объекта, на который указывает ссылка, и вызывается нужный метод. Причем решение принимается динамически, т.е.во время выполнения программы. При определении виртуального метода пишут: public virtual <тип возврата>Имя метода(…){ … } При переопределении вирт.метода в производном классе пишут public override <тип возврата>Имя метода(…){…}
Переопределение метода наз.замещением метода. Примечания:
1.при переопределении метода сигнатуры(списки параметров) и типы возвратов у вирт.метода и метода-заменителя должны совпадать.
2.вирт. метод нельзя определять как static-метод
3.вирт.метод переопределять не обязательно. В этом случае будет выполняться версия определенная в базовом классе
4.свойства можно разрабатывать со словом virtual, а затем с помощью слова override переопределять их в производном классе
Переопределение вирт.метода –основа для одной из самых мощных концепций С#: динамической диспетчеризации метода. – это механизм метода во время выполнения программы, а не в период компиляции. Благодаря такому механизму реализ-ся: динамический полиморфизм и наследование. Сочетая наследование с возможностью переопределения методов в базовом классе можно определить общую форму методов, кот.будет использ. Производными классами. Например, в классе Figura можно разработать вирт. методы Площадь и Периметр, и переопределять их в производных классах.
28.Использование абстрактных классов.
Иногда создают класс, определяющий своего рода пустой бланк. Производные классы этого базового класса должны «заполнить» бланк своей информацией. Такой класс не обеспечивает реализацию одного или нескольких методов. Он просто говорит о том, что будет метод с таким-то именем. Можно заставить производные классы переопределить методы, которые в базовом не имеют никакого смысла. Для этого и служат абстрактные методы, которые записываются: abstract Тип возврата Имя_ метода(сигнатуры);
Абстрактный метод не содержит тела и, следовательно, не реализуется базовым классом. Поэтому производный класс должен его переопределить. Абстр. метод автоматически является виртуальным поэтому virtual писать не надо.
Примечание:
1.модификатор abstract используется только для обычных методов, а не для static-методов.
2.свойства также могут быть абстрактными.
3.класс, содержащий 1 или несколько абстрактных методов должен быть объявлен как абстрактный (перед Class- abstract)
4.нельзя создавать объекты абстрактного класса, т.к. он полностью нереализуем.
Переопределение методов класса Object. Class Object явл. неявным базовым классом всех других классов и типов данных(int,long). Это значит, что переменные типа Object может указывать на объект любого типа. Этот класс имеет несколько методов. Например, метод Equals(Object Ob1, Object Ob2) определяет: является ли объект Ob1 таким же как объект Ob2, но он для получения результата вызывает перегруженный метод Equals (Object Ob), кот. определяет является ли вызывающий таким же как объект parameter, а точнее являются ли ссылки вызывающего объекта и объекта-аргумента одинаковыми. Когда сравниваются(==,!=) 2 объекта, то вызывается метод Equals из базового класса. По умолчанию он не знает объект какого класса к нему поступил. Поэтому в производном классе, где будут операторы сравнения, нужно переопределить методы Equals и GetHashCode()
public override bool Equals(Object Ob)
{ if (!(Ob is Point))
return false;
else return this==(Point)Ob; }
Роль метода GetHashCode(): возвратить числовое значение, кот. идентифицирует объект в памяти в зависимости от его состояния. Если объекты по содержанию одинаковы, то у них будет одинаковый GetHashCode
public override int GetHashCode()
{return ToString().GetHashCode(); }