- •Предисловие
- •1 Среда визуального программирования visual studio.Net
- •1.1 Введение в объектно - ориентированное программирование
- •1.2 Понятие о событийном управлении Windows
- •1.3 Основные окна среды Visual Studio.Net
- •1.4 Основные структурные элементы разработки проекта c#
- •1.5 Пример первой учебной программы
- •2.1 Технология визуального проектирования форм
- •1.6 Вопросы для самопроверки
- •2 Элементы управления
- •2.2 Элементы управления панели Toolbox
- •2.3 Пример использования элементов управления
- •2.4 Вопросы для самопроверки
- •3 Графический интерфейс языка c#
- •3.1 Пространство имен System.Drawing
- •3.2 Класс Graphics
- •3.3 Пример программной реализации
- •3.4 Вопросы для самопроверки
- •4 Использование меню в приложении
- •4.1 Меню программы
- •4.2 Создание инструментальной панели приложения
- •4.3.Вопросы для самопроверки
- •5 Использование диалоговых меню
- •5.1 Обработчики событий для работы с матрицей
- •5.2 Обработчик событий для открытия файла
- •5.3 Обработчик событий для записи в файл
- •5.4 Обработчик событий для работы с текстом
- •5.5 Вопросы для самопроверки
- •6 Многооконные приложения
- •6.1 Создание «кнопочной» главной формы
- •6.2 Добавление новых форм приложения
- •6.3 Обработчики событий главной формы
- •6.4 Табличная форма представления и редактирования значений
- •6.5 Графическая форма представления прямоугольников
- •6.6 Вопросы для самопроверки
- •7. Понятие класса
- •7.1 Понятие класса
- •7.2 Состав класса
- •7.3 Методы класса
- •7.4 Структура объекта
- •7.5 Пример учебной программы
- •7.6 Доступ к полям
- •7.7 Вопросы для самопроверки
- •1 Понятие класса?
- •8 Элементы классов
- •8.1 Конструкторы
- •8.2 Деструкторы
- •8.3 Свойства
- •8.4 Параметр по ссылке this
- •8.5 События класса
- •8.6 Перегрузка операций класса
- •8.7 Вопросы для самопроверки
- •9 Принципы ооп
- •9.1 Понятие инкапсуляции
- •9.2 Понятие наследования
- •9.3 Вопросы для самопроверки
- •10 Принцип полиморфизма
- •10.1 Понятие полиморфизма
- •10.2 Пример статического наследования методов
- •10.3 Пример динамического наследования методов
- •10.4 Вопросы для самопроверки
- •11 Использование интерфейсов
- •11.1 Понятие интерфейса
- •11.2 Синтаксис интерфейса
- •11.3 Использование стандартного интерфейса iEnumerable
- •11.4 Вопросы для самопроверки
- •12 Композиция и коллекция классов
- •12.1 Понятие композиции и коллекции класса
- •12.2 Пример использования композиции и коллекции класса
- •12.3 Некоторые коллекции Framework
- •12.4 Коллекция ArrayList
- •12.5 Вопросы для самопроверки
- •13 Делегаты
- •13.1 Понятие делегата
- •13.2 Описание делегата
- •13.3 Пример использования делегата
- •13.4 Совместимость делегатов
- •13.5 Методы базовых классов делегатов
- •13.6 Вопросы для самопроверки
- •14 События
- •14.1 Понятие события
- •14.2 Некоторые часто используемые события среды Visual Studio.Net
- •14.3 Пример использования стандартных событий классов
- •14.4 Нестандартные события классов
- •14.5 Вопросы для самопроверки
- •Приложение а Ответы на вопросы для самопроверки
- •1 Понятие класса?
- •Предметный указатель
- •Список литературы
13.5 Методы базовых классов делегатов
Необходимо отметить, что в CTS платформы .NET есть абстрактные классы System.Delegаte и System.MulticastDelegate из которых (как из базовых) создаваемые делегаты могут наследовать некоторые методы.
Перечень свойств и методов, наиболее часто наследуемых создаваемыми делегатами от System.MulticastDelegate, можно представить следующим списком:
public MethodInfo Method {get:}– это свойство возвращает имя метода, на который указывает делегат;
public object Target {get:} – если делегат указывает на метод – член класса, то Target возвращает имя класса метода; если метод статический, то Target возвращает null;
public static Delegate Combine(Delegate[]) – добавляет новые методы к группе методов, обрабатываемых делегатом;
public static Delegate Remove(Delegate source, Delegate value) – удаляет метод value из списка методов делегата source;
public sealed override Delegate[] GetInvocationList() – возвращает список всех связанных с делегатом методов.
Для делегатов существует понятие многоадресный делегат – делегат, способный указывать на любое количество функций. Поскольку все делегаты языка С# являются производными классами от System.MulticastDelegate, то любой делегат С# потенциально является многоадресным.
Применим свойство многоадресности для делегата нашей программы вычисления вещественных функций. Изменения связаны только с обработчиком кнопки, поэтому приведен только фрагмент этого кода:
private void button1_Click(object sender, EventArgs e)
{
string st;
Funk[] ff={Math.Sin, Math.Log, Math.Cos, Math.Exp, Math.Round};
string[] sfu = { "Sin", "Log", "Cos", "Exp", "Round" };
double x, y;
textBox2.Text = "";
x = Convert.ToDouble(textBox1.Text);
st="Значение x=" +textBox1.Text+ "\r\n";
textBox2.AppendText(st);
Funk df = Math.Sin;
for (int i = 1; i < 5; i++)
df += ff[i]; //df = df + ff[i];
for (int i = 4; i >= 0; i--)
{
y = rab(df, x);
df -=ff[i]; //df = df - ff[i];
st = sfu[i]+"=" + y.ToString() + "\r\n";
textBox2.AppendText(st);
}
}
Работа программы приведена на рисунке 13.2.
Рисунок 13.2 – Использование многоадресного делегата
Из рисунка 13.2 видно, что работа многоадресного делегата организована по принципу стека.
Заканчивая рассмотрения делегатов как специальный класс, предназначенный для хранения ссылок на методы, необходимо отметить, что любой объект представляет собой ссылку (в том числе и объект делегата) и может быть передан в некоторые методы в качестве параметра для дальнейшей работы.
Таким образом обеспечивается функциональная параметризация: в методы можно передавать не только данные, но и различные методы их обработки.
13.6 Вопросы для самопроверки
1 Понятие делегата.
2 Какой класс называется функциональным типом?
3 Что является экземпляром класса типа делегат?
4 Какое служебное слово используется при объявлении делегата?
5 Какой метод или функция может использоваться в качестве параметра вызова делегата?
6 Когда формируются ссылки на параметры вызова делегата?
7 Когда совместимы типы делегатов?
8 Когда совместимы экземпляры делегатов?
9 Какие абстрактные классы платформы .NET можно наследовать при создании делегатов?
10 Понятие многоадресного делегата?
