- •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.Элементы управления формы
21.Индексаторы. Специальные приемы построения типов. Создание одномерного индексатора.
В некот. ситуациях бывает удобно индексировать содержимое объекта так, словно он представляет собой массив. Индексация массивов реализуется с использованием оператора [ ]. Св-ва и индексаторы расширяют возм-сти класса.
Свойства и индексаторы расширяют возможности класса. Св-ва предлагают эффект. способ управления доступом к данным экземпляра класса. Индексаторы обеспечивают механизм, посредством кот. к объектам можно получать доступ по индексам на основе синтаксиса массивов. Индексатор позволяет обеспечить индексированный доступ к объекту. Гл. назначение – создавать специализированные массивы, на кот. налагается одно или несколько ограничений. Индексаторы служат для доступа к классам, содержащим наборы похожих элементов. При работе с коллекциями доступ 1) к их содержимому осуществляется с помощью индексатора. С помощью индексатора можно также работать с коллекцией, как с обычным массивом. 2) привести примеры семейств из офисных пакетов. 3) при использовании индексаторов пользовательские типы коллекции лучше согласуются со структурой библиотек базовых классов .Net. Индексатор в С# представляет собой несколько “искаженное” свойство. Объявление индексаторов позволяет создать классы, имитирующие виртуальные массивы. Индексаторы могут характеризоваться одной или несколькими размерностями. Одномерные индексаторы. Формат записи: public Тип_возврата this[int index] { get { // возврат значения, заданного с пом.индекса } set { // установка значения, заданного с пом.индекса } } Объявление индексатора очень похоже на объявление св-ва. Оба аксессора в кач-ве параметра принимают индекс. Если индекс стоит слева от оператора присваивания, то вызывается аксессор set и устанавливается элемент, заданный параметром индекс. В противном случае вызывается аксессор get и возвращается значение, соответствующее параметру индекс.
Индексаторы необязат.создавать с поддержкой как get- , так и set- аксессоров. Можно создать индексатор, предназначенный только для чтения (реализовав только get-аксессор) или только для записи (реализовав только set-аксессор). Индексаторы можно перегружать. Чаще всего индексатор перегружается, чтобы иметь возможность использовать объект класса в качестве индекса, значение которого вычисляется специальным образом. Индексаторы без использования базового массива. Индексатор может не использовать базовый массив. Вполне достаточно, чтобы индексатор обеспечивал функционирование, кот. для пользователя выглядело бы, как будто идет работа с массивом (виртуальный массив).
22.Создание двумерного индексатора.
Можно создавать и многомерные индексаторы. Задание 3: Добавить в проект Matrix класс bezop_mas2D, содержащий двумерный индексатор: class bezop_mas2D
{ int [,] mas; // ваше имя массива
int rows, cols; // ваши имена размерностей
public int dlina; // количество элементов в матрице
public bool errflag; //коструктор
public beop_mas2D(int r, int c)
{ rows = r;
cols = c;
mas = new int[rows, cols];
dlina = rows * cols; }
//Индексатор: public int this [int index1, int index2]
{ get { if(ok(index1, index2))
{ errflag = false;
return mas[index1, index2]; }
else { errflug = true;
return 0; } }
set { if(ok(index1, index2))
{ mas[index1, index2] = value; errflag = false; }
else errflag = true; }
private bool ok(int index1, int index2)
{ if(index1 >= 0 && index1 < rows && index2 >= 0 && index2 < cols)
return true;
return false; } ←// для индексатора }←// для класса
//Проверить работу класса в main():
bezop_mas2D mas2D = new bezop_mas2D(3,5);
Console.WriteLine(“Мягкое приземление при работе с матрицей”);
for (i = 0; i < 6; i++)
mas2D[i, i] = I * 10;
Console.WriteLine(“Работа с уведомлением об ошибках”);
for(i = 0; i < 6; i++)
{ mas2D[i, i] = i * 10; If(mas2D.errflag)
Console.WriteLine(“mas2D[” + i + “,” + i + “] вне границ”); } Console.WriteLine();
Cоnsole.WriteLine(“Создана матрица”); for(i = 0; i < 6; i++) {x = mas2D[i, i];
if(!mas2D.errflag) Console.Write(x + “ ”);
else Console.WriteLine(“mas2D[” + i + “,” + i + “] вне границ”); } } }
Индексаторы и свойства применяются для разработки массивов ( в виде класса ), в которых границы индексов устанавливает пользователь, т.к. не всегда удобна индексация с нуля.