- •1. Эволюция языков прогр-я.
- •2. Что такое .Net? Обзор технологий программирования под Windows.
- •3. Компоненты платформы .Net. Что такое .Net Framework?
- •4. Модель выполнения приложения в среде .NetFramework. Промежуточныйязык Microsoft (Microsoft Intermediate Language, msil). Сборки
- •5. Обзор встр. Типов данных в с#. Применение встроенной функц-сти типов данных.
- •6. Операции ввода-вывода. Формат вывода. Пространство имён System. Класс Math. Пространство имён System и класс Math
- •7. Арифметические операции. Операции отношений и логические операции. Операторы и выражения в c# .
- •Операторы сравнения в c#. Лог. Операции для условий
- •Операторы
- •8. Одномерные массивы в c#. Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.
- •9. Двумерныемассивы в c#. Виды двумерных массивови способы их определения; способы создания; построчный вывод на экран
- •10. Структуры в c#. Создание структур, доступ к элементам, массивы структур.
- •11.Объект и его свойства. Характеристики ооп.
- •12.Классы в c#. Форма определения класса. Члены класса: методы, поля, свойства и события.
- •13.Конструкторы. Параметризованные конструкторы. Использование оператора new.
- •14. Типы значений и ссылочные типы. Динамическое использование памяти: стеки и кучи. Упаковка и распаковка.
- •15. Деструкторы. Сборка «мусора».
- •16. Определение методов класса. Модификаторы доступа к методам класса. Параметры методов класса, передача аргументов.
- •17. Модификаторы ref, out, params параметров методов.
- •18. Общие (статические) члены класса. Доступ к общим членам. Ограничения на static-методы.
- •19.Область видимости и время существования переменных.
- •20. Преобразование и приведение типов.
- •21. Обработка исключительных ситуаций.
- •22. Перегрузка методов и перегрузка конструкторовкак механизм реализации полиморфизма. Виды конструкторов.
- •23. Понятие стека. Класс «Стек из символов», его основные методы.
- •24. Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений.
- •25. Свойства как механизм реализации инкапсуляции. Формат записи свойств.
- •26. Индексаторы. Специальные приемы построения типов. Создание одномерных и двумерных индексаторов.
- •27.Наследование. Базовые и производные классы. Доступы к членам базовых классов.
- •28.Конструкторы и наследование (проект «Наследование»).
- •29. Ссылки на базовый класс и объекты производных классов.
- •30. Виртуальные методы и их переопределение.
- •31. Абстрактные классы.
- •32. Понятие интерфейса. Определение интерфейса.
- •33. Способы реализации интерфейса.
- •34.Некоторые станд.Интерфейсы среды .Net Framework.
- •35. Механизмы реализации полиморфизма в c#.
- •36. Понятие обобщенного программирования. Принципы обобщенного программирования (абстрагирование, иерархия, типизация).
- •37. Коллекции и наборы. Обзор коллекций. Интерфейсы коллекций. Классы коллекций общего назначения.
- •38. Классы ArrayList, Queue, Stack. Методы работы с различными структурами данных.
- •39. Динамическая идентификация типов. Проверка типа с помощью ключевого слова is. Использование операторов as, typeof.
- •40. Обобщение. Разработка обобщенных наборов, методов, классов.
- •41. Отражение и атрибуты. Понятие отражения. Класс System.Type. Получение информации о методах и типах. Атрибуты. Основы применения атрибутов.
- •42.Принципы работы Windows-приложений c пользователем.
- •43. Делегаты. Назначение делегатов. Многоадресатная передача.
- •44. События. Объявление и генерация событий. Реализация обработчиков событий.
- •Объявление события:
- •45.Понятие компонента и компонентной модели, компонентно-ориентированного программирования.
- •46.Принципы и технологии внедрения и связывания объектов. Ос Windows позволяет:
20. Преобразование и приведение типов.
Часто возникает необх-сть переменной одного типа присвоить значение переменной другого типа. Преобразование между типами данных бывает двух видов: неявное и явное(автоматическое). Неявное преобразование – это преобр-е типов данных, кот. явно не задано и выполняется без спец. указанной команды, т.е такие преобр-я выполняются автомат. Автомат.преобр.будет вып., если: - оба типа совместимы, - тип переменной - приемника больше, чем тип источника. => вып-ся преобр-е с расширением, или расширяющее преобразование. Явное преобр-е – явно заданная инстр-я компилятору преобразовать один тип в другой. Инстр-я зап.так: (тип_приемника) выражение. Еслиприведение приводит к сужающему преобр-ю, то возможна потеря инф-ции. Преобр.типов может встречаться и в выражениях. Преобр. типов вып.на основе правил продвижения по «типовой» лестнице.
21. Обработка исключительных ситуаций.
В языке С# предусмотрена обработка ошибочных ситуаций, связанных с выполнением таких системных действий как ввод/вывод через файлы, делением на 0. За обработку исключений отвечает класс ошибок System.Exseption. Для обработки исключений в соответствующем методе класса или в Main() нужно оформить 2 блока: Блок try { //оператор. Здесь может произойти ошибка! } Блок catch (System.Exsceptionerr) { //операторы. Выполняется перехват ошибок указанного типа } При возникновении ошибки внутри блока try проверяется какой тип ошибок перехватывает блок catsh. Для одного блока try можно указать несколько различных блоков catch перехватывающих разные типы ошибок. Если тип ошибок, указанный в блоке catch, не соотв.типу возникшей ошибки, программа прерывается аварийно. Объектная переменная err имеет несколько полезных св-в, которые доступны в приложении: Uessage – содержит текст ошибки; targetSite – создает имя метода, вызвавшего ошибку; Sounce – создает имя приложения, вызвавшего ошибку. Иногда блок catch оформляется кратко: catch(Exsceptionerr) { C.Wr.(err.Message); C.RL(); }
22. Перегрузка методов и перегрузка конструкторовкак механизм реализации полиморфизма. Виды конструкторов.
В C# методы внутри одного класса могут иметь одинаковое имя при условии, что их параметры будут разл.. Такую ситуацию наз. перегрузкой методов, а методы – перегруженными. Перегрузка методов – один их способов реализации полиморфизма в C#. Все перегруженные методы должны иметь списки параметров, которые отличаются по типу и/или количеству. Методам для перегрузки недостаточно отличаться лишь типами возвращаемых значений, может произойти автоматическое преобразование типов. Они должны отличаться типами или числом параметров. При вызове перегруженного метода выполняется та его версия, параметры которой совпадают (по типу и /или количеству) с заданными аргументами. Перегрузка методов нужно тогда, когда нужно реализовать один и тот же метод для различных типов данных, чтобы не плодить имена. Перегрузка упрощает процесс программирования. Следует отметить, что params-параметр не является определяющим фактором отличия перегруженного метода от другого (ведь можно и 0 аргументов через params передать). Тип возврата значения и params – это не факторы перегруженного метода. Конструкторы тоже можно перегружать. Это позволяет создавать объекты различными способами. Перегружая констры предоставляет определенную гибкость в выборе способов создания объектов. Одна из распр.причин перегрузки – возм-сть инициализации одного объекта с помощью другого. Конструкторы, в которых создаваемый объект инициализируется объектом-параметром, наз. конструктором копирования. ClassStac { //члены-перем.: //char[] mas; //массив для хранения данных стека int tos; }
Конструктор по умолчанию. Конструктор не имеющий обязательных аргументов. Используется при создании массивов объектов, вызываясь для создания каждого экземпляра. В отсутствие явно заданного конструктора по умолчанию его код генерируется компилятором (что на исходном тексте, естественно, не отражается).
Конструктор копирования. Конструктор, аргументом которого является ссылка на объект того же класса. Применяется в C++ для передачи объектов в функции по значению. Конструктор копирования в основном необходим, когда объект имеет указатели на объекты выделенные в куче. Если программист не создаёт конструктор копирования, то компилятор создаст неявный конструктор копирования, который копирует указатели как есть, то есть фактическое копирование данных не происходит и два объекта ссылаются на одни и те же данные в куче. Соответственно попытка изменения «копии» повредит оригинал, а вызов деструктора для одного из этих объектов при последующем использовании другого приведёт к обращению в область памяти, уже не принадлежащую программе. Аргумент должен передаваться именно по ссылке, а не по значению. Это вытекает из коллизии: при передаче объекта по значению (в частности, для вызова конструктора) требуется скопировать объект. Но для того, чтобы скопировать объект, необходимо вызвать конструктор копирования.
Конструктор преобразования. Конструктор, принимающий один аргумент. Задаёт преобразование типа своего аргумента в тип конструктора. Такое преобразование типа неявно применяется только если оно уникально.
Виртуальный конструктор. Конструктор не бывает виртуальным в смысле виртуального метода — для того, чтобы механизм виртуальных методов работал, нужно запустить конструктор, который автоматически настроит таблицу виртуальных методов данного объекта.
«Виртуальными конструкторами» называют похожий, но другой механизм, присутствующий в некоторых языках — например, он есть в Delphi, но нет в C++ и Java. Этот механизм позволяет создать объект любого заранее неизвестного класса при двух условиях:
- этот класс является потомком некоего наперёд заданного класса.
- на всём пути наследования от базового класса к создаваемому цепочка переопределения не обрывалась.