Нестандартные события классов

Помимо стандартных событий – как реакция программы на действия пользователя, события могут формироваться и внутри Windows-приложений с помощью специальных методов.

События, формируемые самим приложением, позволяют организовать динамическую (во время работы приложения) связь между различными объектами, например, продажа некоторого товара в магазине должна автоматически изменять содержимое многих документов – общий доход от продажи, документ по продаже конкретного товара, наличие этого товара на складе и рекомендации по пополнению товара и т.д.

Таким образом, возникает необходимость информирования некоторых объектов приложения о событии, происшедшем в объекте источнике сообщения.

Механизм взаимодействия источника события с его получателями (иногда их называют клиентами) основан на использовании делегата. В приложении объявляется экземпляр делегата, которому соответствуют стандартные методы обработчиков событий.

Далее необходимо определить класс, являющегося источником события (sender), и в нем метод описывающий событие, и метод инициирующий событие.

В процессе работы приложения объекты обработчиков событий (клиентов), которые хотят получать уведомление об изменении состояния источника, необходимо включить в список методов, обрабатываемых делегатом. Этот процесс называется регистрацией обработчиков событий.

При появлении события все зарегистрированные методы поочередно, с помощью делегата, вызываются на выполнение.

Работу механизма взаимодействия источника события с его получателями рассмотрим на следующем учебном примере.

Задача 14.1 Сформировать массив из 10 случайных целых чисел в диапазоне от минус 5 до 10. Предположим, что отрицательные значения недопустимы и для них мы будем формировать события.Необходимо напечатать массив, вычислить его сумму и нарисовать график изменения значений.

Если значение массива число отрицательное, то необходимо формировать событие, на которое должны реагировать два обработчика. Первый должен поменять знак у отрицательного числа, а второй должен изменить сумму чисел в соответствии с новым значением элемента массива.

Для наглядности предусмотрим вывод графика измененных значений массива.

Итак, для создания и использования события нужно, прежде всего, объявить делегата, с помощью которого реализуется связь между источником события и его клиентами.

В библиотеке.NET описано огромное количество стандартных делегатов, предназначенных для реализации механизма обработки событий. Большинство этих классов оформлено по одним и тем же правилам:

– имя делегата включает название события и заканчивается суффиксом EventHandler;

– делегат имеет два формальных параметра. Первый параметр задает источник события и имеет тип object. Второй параметр задает аргументы события и имеет тип EventArgs или производный от него.

Рекомендуется при объявлении делегата придерживаться этих правил, например:

public delegate voidZamenaEventHandler(object sender, ZamenaEventArgs arge);

В этом примере мы создаем делегата для обработки события Zamena (замена), связанного с изменениями, которые должны произойти в объекте - источнике события. В описании делегата указаны два аргумента: объект sender, создавший событие, и объект arge типа ZamenaEventArgs, содержащий связанные с событием параметры.

Поскольку нам понадобится передавать только индекс массива, то лучше определить класс ZamenaEventArgs следующим образом:

public class ZamenaEventArgs: EventArgs

{

public int item;

}

Следующим этапом в реализации механизма обработки событий является определение класса, являющегося источником события (sender), и в нем метода, инициирующего событие. Этот метод имеет специальный формат записи и во многом определяется форматом записи соответствующего ему делегата – после определения спецификатора доступа к методу (обычно это public) записывается служебное слово event, после которого указывается тип, заданный делегатом, и имя события. Например:

public event ZamenaEventHandler Zamena;

Полное описание класса выглядит следующим образом:

class sobit

{

public event ZamenaEventHandler Zamena;

public void prov(ZamenaEventArgs arge)

{

if (masi[arge.item] < 0)

{

Zamena(this,arge);

}

}

}

На следующем этапе реализации механизма обработки событий необходимо определиться с классами получателями событий. Особенность этих классов является то, что в них должны находиться методы обработчиков событий, формат записи которых должен совпадать с форматом записи соответствующего делегата. Например:

class zam1

{

public void OnZam1(object sender, ZamenaEventArgs e)

{

masi[e.item] = masi[e.item] * (-1);

}

}

Регистрацию обработчиков событий необходимо производить для объектов (не классов) классов обработчиков событий. Это возможно только во время работы приложения – объекты (переменные) создаются во время работы приложения, например, во время инициализации формы:

public Form1()

{

InitializeComponent();

zam1 z1 = new zam1();

zam2 z2 = new zam2();

so.Zamena += z1.OnZam1;

so.Zamena += z2.OnZam2;

}

Для демонстрации работы приложения использованы две кнопки – «Формирование массива» и «Проверка массива и запуск событий».

Исходный код программы имеет следующий вид:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1: Form

{

public delegate void ZamenaEventHandler(object sender,

ZamenaEventArgs arge);

public int cob=0;

public static int sum = 0;

public static int[] masi = new int[10];

public class ZamenaEventArgs: EventArgs

{

public int item;

}

class sobit

{

public event ZamenaEventHandler Zamena;

public void prov(ZamenaEventArgs arge)

{

if (masi[arge.item] < 0)

{

Zamena(this,arge);

}

}

}

sobit so = new sobit();

class zam1

{

public void OnZam1(object sender, ZamenaEventArgs e)

{

masi[e.item] = masi[e.item] * (-1);

}

}

class zam2

{

public void OnZam2(object sender, ZamenaEventArgs e)

{

sum = sum + 2 * masi[e.item];

}

}

public Form1()

{

InitializeComponent();

zam1 z1 = new zam1();

zam2 z2 = new zam2();

so.Zamena += z1.OnZam1;

so.Zamena += z2.OnZam2;

}

private void button1_Click(object sender, EventArgs e)

{

cob = 0; sum = 0;

string ss="";

Random rnd = new Random();

for(int i=0;i<10;i++)

{

masi[i] = rnd.Next() % 15 - 5;

sum = sum + masi[i];

ss = ss + masi[i].ToString() + " ";

}

textBox1.AppendText("Исходный массив: \r\n");

textBox1.AppendText(ss + "\r\n");

textBox1.AppendText("Сумма элементов="+sum.ToString()+"\r\n");

this.Invalidate();

}

private void button2_Click(object sender, EventArgs e)

{

cob=1;

ZamenaEventArgs zz = new ZamenaEventArgs();

for (int i = 0; i < 10; i++)

{

zz.item = i;

so.prov(zz);

}

textBox1.AppendText("Сумма элементов="+sum.ToString()+"\r\n");

this.Invalidate();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawLine(new Pen(Brushes.Blue, 2), 10, 200, 250, 200);

Pen myPen = new Pen(Color.Red, 2);

if (cob == 0)

{

for (int i = 1; i < 10; i++)

g.DrawLine(myPen,i*10,(200-masi[i-1]*10),(i+1)*10,(200-masi[i]*10));

}

if (cob == 1)

{

for (int i = 1; i < 10; i++)

g.DrawLine(myPen,i*10+110,(200-masi[i-1]*10),(i+1)*10+110, (200-masi[i]*10));

}

}

}

}

Работа программы представлена на рисунке 14.3.

Рисунок 14.3 Работа приложения с обработкой событий

Вопросы для самопроверки

1 Понятие события.

2 Где находятся заготовки обработчиков событий на действия пользователя для элементов управления?

3 Как обычно называются события класса?

4 Что произойдет, если дважды «Кликнуть» на кнопку, расположенную в окне нашей формы?

5 Что определяет первый формальный параметр всех обработчиков сообщений?

6 Что определяет второй формальный параметр обработчиков сообщений?

7 Где перечислены события, на которые должны реагировать элементы управления формы?

8 Как можно объединить все события класса?

9 Где происходит добавление событий в многоадресный делегат формы?

10 Где объявляется многоадресный делегат формы?

Приложение А

Ответы на вопросы для самопроверки

СРЕДА ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ VISUAL STUDIO.NET

1 Понятие события в работе компьютера?

Событие это появление любой «нестандартной» ситуации в работе компьютера, например, нажатии клавиши на клавиатуре, перемещении курсора мыши, деления на ноль и т.д.

2 Как система Windows «различает» события?

Каждое событие имеет свой индивидуальный номер – «вектор прерывания».

3 Что делает система Windows, получив информацию о появлении события?

Определив номер события система Windows «запускает» соответствующий драйвер.

4 Понятие драйвера.

Это специальная программа, корректно реагирующая на соответствующее событие.

5 Понятие сообщения.

В общем случае сообщения – это реакция операционной системы Windows на происходящие в системе события.

6 Что содержит сообщение?

Сообщение Windows является записью, которая содержит информацию о том, что произошло и дополнительную информацию (параметры) о произошедшем событии.

7 Куда поступают сообщения, получаемые системой Windows от драйверов?

Все сообщения, получаемые Windows, помещаются в системную очередь сообщений, которая существует в единственном варианте. Далее из системной очереди сообщения распределяются в очереди сообщений отдельных Windows-приложений.

8 Зачем в каждом приложении имеется цикл обработки сообщений поступающих от Windows?

С помощью этого цикла приложение извлекает «свои» сообщения и передает их соответствующим обработчикам сообщений окна приложения.

9 Какой метод приложения реализует цикл обработки сообщений поступающих от Windows?

Application.Run(new Form1());

10 Для чего предназначен класс Form?

Класс Form определяет пользовательский интерфейс приложения.

ЭЛЕМЕНТЫ УПРАВЛЕНИЯ

1 Для чего предназначен Windows.Forms.Designer платформы.NET?

Продолжение приложения А

Это конструктор или дизайнер форм Windows платформы.NET. Он позволяет в интерактивном режиме выполнять визуальное проектирование формы приложения.

2 Что означает служебное слово “partal” в описании класса формы?

Это служебное слово означает, что в приведенном описании находится только часть всего кода описания класса формы.

3 Какая часть описания класса формы содержит обработчики сообщений?

Описание обработчиков сообщений находится в файле с именем Form1.cs.

4 С какого метода начинается выполнение Windows приложении?

Работа Windows приложения начинается выполнением метода Main().

5 Какой метод создает объект класса Form1 при запуске программы?

Создание и инициализацию объекта класса Form1 при запуске программы осуществляет метод Application.Run().

6 Для чего предназначен управляющий элемент Label?

Этот управляющий элемент предназначен для размещения информации на форме.

7 Какое свойство управляющего элемента Label позволяет выводить информацию в окно формы?

Для вывода информации в управляющем элементе Label используется свойство Text.

8 Каким свойством управляющего элемента Label можно задать его «прозрачность»?

«Прозрачность» элемента Label можно задать с помощью свойства BackColor.

9 С помощью какого свойства можно нанести изображение на кнопку в окне формы?

Изображение на кнопку можно наносить с помощью свойства Image.

10 Как называется диалоговое окно, блокирующее дальнейшие действия с приложением до того момента, пока это окно не будет закрыто?

Такое диалоговое окно называется модальным диалоговым окном.

ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ЯЗЫКА C#

1 Что означает GDI+ в языке C#?

Это сокращенное обозначение графического интерфейса приложений.

2 Что определяет объект класса Brush?

Объект класса Brush определяет, как и чем будет заполняться пространство внутри геометрических фигур.

3 Что определяет объект класса Pen?

Объект класса Pen определяет цвет и тип линий, при помощи которых рисуются контуры геометрических фигур.

4 Что определяет класс Graphics?

Он определяет набор свойств и методов для вывода текста, изображений и геометрических фигур на экран монитора.

Продолжение приложения А

5 Какое сообщение в системе Windows «следит»за перемещением и изменением размера окон?

За перемещением и изменением размера окон системе Windows «следит» сообщение WM_PAINT

6 Как называется обработчик, связанный с перерисовкой содержимого окна формы нашего приложения?

Обработчик, связанный с перерисовкой содержимого окна формы нашего приложения называется Form1_Paint.

7 Что определяет первый формальный параметр обработчика Form1_Paint?

Он передает ссылку на объект, вызвавший событие.

8 Что определяет второй формальный параметр обработчика Form1_Paint?

Через него передается ссылка на объект класса PaintEventArgs.

9 Понятие контекста устройства монитора.

Это специальные программы системы Windows, связывающие приложение с драйвером видеокарты компьютера.

10 Какой метод требует от операционной системы Windows сформировать для формы сообщение WM_PAINT?

Это метод this.Invalidate();.

ИСПОЛЬЗОВАНИЕ МЕНЮ В ПРИЛОЖЕНИИ

1 Для чего создается меню приложения?

Меню приложения позволяет в удобной форме использовать основные режимы работы приложения.

2 Чему должны соответствовать команды меню приложения?

Команды меню приложения должны соответствовать основным режимам работы приложения.

3 Какой элемент управления окна ToolBox позволяет создавать меню приложения?

Меню приложения позволяет создавать элемент управления MenuStrip.

4 Какое поле редактора меню приложения используется для ввода команды?

Для ввода команды в редакторе меню необходимо использовать поле Type Here.

5 С помощью какой команды редактора меню приложения можно вставить новую строку меню приложения между уже существующих строк?

Новую строку меню приложения между уже существующими строками можно вставить командой Insert New.

6 Зачем при создании меню приложения желательно использовать клавиатурные акселераторы?

Применение клавиатурных акселераторов является альтернативным мышки способом выбора команд.

7 Для чего предназначена команда Insert Separator редактора меню приложения?

Продолжение приложения А

С помощью этой команды редактора меню можно вставить разделительную линию между строками меню.

8 В чем принципиальное отличие элемента управления RichTextBox от TextBox?

Элемент RichTextBox позволяет работать с файлами разного типа.

9 Какой элемент управления используется для хранения изображений «иконок», дублирующих основные команды меню приложения?

Для хранения многих изображений используется элемент управления ImageList.

10 Какое свойство кнопки инструментальной панели, позволит снабдить каждую кнопку окном с поясняющим сообщением, которое появляется при «наведении» на кнопку курсора мыши?

Чтобы снабдить кнопки инструментальной панели окнами с «всплывающими» поясняющим сообщением необходимо использовать свойство ToolTipText.

ИСПОЛЬЗОВАНИЕ ДИАЛОГОВЫХ МЕНЮ

1 Какие элементы управления относятся к диалоговым категориям?

Это элементы, позволяющие использовать диалоговые ресурсы системы Windows для обращения к дискам, папкам и файлам компьютера.

2 Какой элементы управления предназначен для создания и обслуживания диалогового окна открытия файла?

Для создания и обслуживания диалогового окна открытия файла необходимо использовать элемент управления OpenFileDialog.

3 Какой метод отображает на экране стандартное диалоговое окно системы Windows для выбора файла при его открытии?

Это метод openFileDialog1.ShowDialog.

4 Как настроить элемент управления OpenFileDialog на открытие только текстовых файлов?

Необходимо свойству Filter элемента OpenFileDialog определить значение "Text files|*.txt".

5 Что произойдет, если в диалоговом окне открытия файла пользователь кликнул на кнопку «Открыть»?

Метод ShowDialog элемента OpenFileDialog возвращает значение DialogResult.OK.

6 Что означает часть условия openFileDialog1.FileName.Length > 0

в записи if (openFileDialog1.ShowDialog() == DialogResult.OK &&

openFileDialog1.FileName.Length > 0)?

Это часть условия означает, что «длина строки полного пути к выбранному пользователем файлу» должна быть больше нуля.

7 Какой метод элемента управления RichTextBox1 используется для открытия файла?

Это метод richTextBox1.LoadFile

8 Для чего предназначен элементы управления SaveFileDialog?

Продолжение приложения А

Он предназначен для создания и обслуживания диалогового окна сохранения файла.

9 Что определяет свойство FileName элемента управления SaveFileDialog?

Это свойство позволяет определить шаблон имени сохраняемого файла.

10 Что определяет параметр RichTextBoxStreamType.PlainText метода richTextBox1.SaveFile?

Что документ будет сохранен в формате Text.

ИСПОЛЬЗОВАНИЕ ДИАЛОГОВЫХ МЕНЮ

1 Что означает сокращение MDI?

Многооконный интерфейс документов.

2 В каких ситуациях имеет смысл проектировать главную форму как главную кнопочную форму?

Когда каждый режим приложения создаваемого проект предоставлен различными сложными сервисами, требующими собственного интерфейса.

3 Какой элемент управления обычно используется для размещения рисунков на форме?

Это элемент управления PictureBox.

4 Как добавить в проект новую форму с помощью окна Solution Explorer?

Необходимо кликнуть правой клавишей мыши строку названия проекта WindowsFormsAplication1 и в появившемся меню режимов работы выберите режим Add и в нем команду Add Windows Form

5 Как добавить в проект новую форму с помощью режима Project?

Необходимо выбрать режим Project, а в нем команду Add Windows Form и подтвердить название предлагаемой формы нажатием кнопки Add.

6 Чем отличается диалоговое (модальное) окно от обычного окна формы?

Из диалогового окна нельзя выйти, не закончив диалог и не закрыв форму.

7 Каким методом открывается обычное (не модальное) окно формы?

Методом Show().

8 Каким методом открывается модальное окно формы?

Методом ShowDialog().

9 Что делает следующий фрагмент программы:

private void button3_Click(object sender, EventArgs e)

{

Form5 f5 = new Form5();

if (f5.ShowDialog() == DialogResult.OK) k = 0;

}?

Создается новая форма, которая открывается в виде модального диалогового окна.

10 Какой элемент управления часто используется для табличной формы представления информации?

Элемент управления DataGridView.

ПОНЯТИЕ КЛАССА

1 Понятие класса?

Продолжение приложения А

Класс это тип данных, содержащий поля, методы и события.

2 Понятие свойства класса?

Это совокупность методов, позволяющих классу обмениваться (читать или записывать) значениями полей класса с другими классами программы.

3 Понятие конструктора класса?

Это специальные методы класса, которые предназначены для создания объектов класса и присваивания начальных значений полям класса.

4 Понятие деструктора класса?

Это специальные методы, определяющие порядок действий при освобождении ресурсов, выделенных объекту.

5 Понятие события класса?

Это специальные методы, позволяющие классу реагировать на действия пользователя или на определенные изменения в программе.

6 Понятие индексатора класса?

Это средство доступа к элементам данных класса (обычно массивам) по их порядковому номеру.

7 Назначение поля this объекта?

Это ссылка на адрес текущего объекта, которая позволяет методам класса работать с полями текущего объекта.

8 Как называют переменную типа класс?

Переменную типа класс обычно называют объектом.

9 Что означает служебное слово static в описании класса?

Это указание, что программа может использовать класс и его элементы, не создавая переменной этого класса (объекта класса).

10 Что означает служебное слово public в описании данных класса?

Начало описания данных открытых для доступа из программы.

ЭЛЕМЕНТЫ КЛАССОВ

1 Для чего предназначен конструктор с умолчанием?

Он создает объект и полям объекта присваивает некоторые фиксированные значения.

2 Для чего предназначен конструктор с заданием параметров?

Он создает объект и полям объекта присваивает задаваемые значения.

3 Как называется процесс определения нескольких методов с одинаковыми именами?

Перегрузкой методов.

4 Как называются несколько конструкторов одного класса?

Множественные конструкторы.

5 Когда вызывается деструктор класса tka?

Он вызывается автоматически сборщиком мусора при удалении объекта из кучи.

6 Как обычно называется метод, если тип его возвращаемого значения объявлен void?

Процедура.

Продолжение приложения А

7 Как должен заканчиваться в языке С# метод если его тип не void?

Работа метода должна заканчиваться выполнением Оператора return.

8 Какие формальные параметры метода С# называются параметры-ссылки?

Формальные параметры, перед которыми стоит слово ref.

9 Как называется объединение в одной структуре полей и методов их обработки?

Инкапсуляция.

10 Какой механизм используется в классах для доступа к «закрытым» полям класса?

Свойства.

ПРИНЦИПЫ ООП

1 Как один объект может информировать другой объект об изменении своего состояния?

С помощью механизма событий.

2 Как называется объект, информирующий другой объект об изменении своего состояния?

Источник события.

3 Как формируется «пустой» обработчик некоторого события?

В окне свойств на странице событий необходимо дважды кликнут в соответствующей строке.

4 Какой обработчик события будет сформирован, если на форме дважды кликнут на кнопку button1?

private void button1_Click(object sender, EventArgs e)

5 Для чего используется перегрузка операций в классах?

Она позволяет использовать в обычных математических выражениях переменный типа класс.

6 Понятие наследования?

Наследование это способность производного класса использовать некоторые свойства, данные и методы базового класса.

7 Что является целью наследования классов?

Целью наследования является повторное использование уже созданных классов.

8 Как называется класс, свойства, данные и методы которого наследуются другим классом?

Базовый класс.

9 Как называется класс, наследующий свойства, данные и методы базового класса?

Производный класс.

10 На чем базируется объектно-ориентированное программирование?

На принципах инкапсуляции, наследовании и полиморфизме.

ПРИНЦИП ПОЛИМОРФИЗМА

Продолжение приложения А

1 Какой класс является базовым классом в иерархической цепочке всех классов языка C#?

System.Object.

2 Какой объект базового или производного классов создается раньше при вызове конструктора производного класса?

Объект базового класса.

3 В чем преимущество цепочек наследуемых классов?

Наследование последнего класса в такой цепочке позволяет получить в свое распоряжение поля, свойства и методы всех классов цепочки.

4 Что означает статическое наследование в языке C#?

Наследование, в котором связи между объектами определяются в процессе компиляции программы.

5 Что означает динамическое наследование в языке C#?

Наследование, в котором связи между объектами определяются в процессе выполнения программы.

6 Понятие полиморфизма в языке C#?

Полиморфизм это многообразие форм реализации одноименных методов в цепочке наследуемых классов.

7 Как реализуется механизм полиморфизма?

Механизм полиморфизма реализуется за счет перекрытие одноименных методы базовых классов.

8 Как называется метод, объект для которой определяется во время работы программы?

Такой метод называется виртуальным.

9 Какой класс в языке C# называется абстрактным базовым классом?

Класс, для которых создание объектов невозможно.

10 Что представляет собой таблица виртуальных методов?

Специальная таблица, в которой находятся все виртуальные методы и адреса их точек входа.

ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСОВ

1 Понятие интерфейса?

Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны.

2 В чем отличие наследования интерфейсного класса от обычного наследования?

Класс, наследующий интерфейс (интерфейсный класс), обязан полностью реализовать все методы интерфейса.

3 В чем отличие интерфейсного класса от обычного класса?

Для интерфейсного класса в С# разрешено множественное наследование.

4 Почему в интерфейсных класса возможно появление конфликтов в названиях имен?

Продолжение приложения А

Конфликт имен может проявляться при множественном наследовании, потому что разные родительские интерфейсы могут содержать одноименные методы с одинаковым синтаксисом.

5 Как можно решать конфликт имен при множественном наследовании?

Один из способов решения конфликта имен при множественном наследовании заключается в склеивание методов.

6 В чем суть склеивание методов?

В интерфейсном классе у всех одноименных методов должна быть одинаковая программная реализация, которая объявляется как единственная для всех одноименных методов своих родителей.

7 В чем суть переименования методов?

Это один из способов решения конфликта имен при множественном наследовании, при этом одноименных методов родительских интерфейсов переименовываются. Для каждого «нового» метода записывается своя реализация.

8 В чем преимущество интерфейсов?

Интерфейсы задают дополнительные свойства классу. Каждый интерфейс наделяет класс тем или иным новым свойством.

9 Какой тип могут иметь интерфейсы?

У интерфейсов нет типов.

10 Какое служебное слово используется при объявлении интерфейса?

При объявлении интерфейса перед именем класса необходимо использовать служебное слово interface.

КОМПОЗИЦИЯ И КОЛЛЕКЦИЯ КЛАССОВ

1 Понятие композиции классов?

Если некоторый класс, в своих полях данных, использует объекты другого класса, то такое объединение классов называется композицией.

2 В чем основная цель композиции классов?

Композиция классов это один из способов повторного использования ранее написанных фрагментов программ.

3 Понятие коллекции классов?

Объединение однотипных объектов в одной структуре данных называется коллекцией классов.

4 Какая объединяющая структура обычно используется для коллекционирования однотипных объектов?

Класс, который называется коллекцией.

5 Какие коллекции относятся к коллекциям с прямым доступом?

Это коллекции, доступ к элементам которой возможен по номеру элемента, например, массивы.

5 Какие коллекции относятся к коллекциям с последовательным доступом?

Продолжение приложения А

Это коллекции, для доступа к элементам которой необходимо выполнять последовательный поиск, например, стеки, очереди, списки.

6 Какие коллекции относятся к иерархическим коллекциям?

В иерархических коллекциях данные организованы в виде различных «древовидных» структур, например, в виде бинарного дерева или иерархической системы классификации.

7 Объекты какого типа могут включаться в коллекцию класса ArrayList?

Коллекция класса ArrayList предназначена для хранения объектов произвольного типа.

8 Какое свойство класса ArrayList хранит текущую емкость коллекции?

Это свойство целого типа Capacity.

9 Какое свойство класса ArrayList хранит текущую длину коллекции?

Это свойство целого типа Count.

10 Какой метод класса ArrayList позволяет включать объект в коллекцию на нужное место?

Это метод Insert (int Indx, Object Value);, который вставляет элемент Value на нужное место Indx коллекции.

ДЕЛЕГАТЫ

1 Понятие делегата?

Делегат это специальный класс, предназначенный для хранения ссылок на методы.

2 Какой класс называется функциональным типом?

Класс, позволяющий описать некоторое множество объектов, каждый из которых является функцией (или ссылкой на функцию), называется функциональным типом.

3 Что является экземпляром класса типа делегат?

Экземплярами такого класса являются ссылки на функции (методы) – им также как переменным выделяются места в памяти компьютера, начальный адрес которых являются «точками» входа в функции и передаются ссылками.

4 Какое служебное слово используется при объявлении делегата?

При объявлении интерфейса перед именем класса необходимо использовать служебное слово delegate.

5 Какой метод или функция может использоваться в качестве параметра вызова делегата?

Любая функция или метод, описание которой соответствует описанию делегата, может использоваться в качестве параметра вызова делегата.

6 Когда формируются ссылки на параметры вызова делегата?

Ссылки на параметры вызова делегата формируются во время работы программы (динамически).

7 Когда совместимы типы делегатов?

Типы делегатов всегда несовместимы друг с другом, даже если их форматы записей совпадают.

Продолжение приложения А

8 Когда совместимы экземпляры делегатов?

Если для объявления делегатов использован один и тот же тип, то имеет смысл говорить о совместимосте (равенстве) экземпляров делегатов.

9 Какие абстрактные классы платформы.NET можно наследовать при создании делегатов?

В стандартной системе типов (CTS) платформы.NET есть абстрактные классы System.Delegаte и System.MulticastDelegate, которые можно использовать в качестве базовых при создании делегатов.

10 Понятие многоадресного делегата?

Для делегатов существует понятие многоадресный делегат – делегат, способный указывать на любое количество функций. Поскольку все делегаты языка С# являются производными классами от System.MulticastDelegate, то любой делегат С# потенциально является многоадресным.

СОБЫТИЯ

1 Понятие события?

События класса это специальные методы, позволяющие классу реагировать на действия пользователя или на определенные изменения в программе.

2 Где находятся заготовки обработчиков событий на действия пользователя для элементов управления?

Для многих действий пользователя разработаны заготовки обработчиков событий, которые можно посмотреть в окне Properties на странице Events.

3 Как обычно называются события класса?

Обработчик сообщений.

4 Что произойдет, если дважды «Кликнуть» на кнопку, расположенную в окне нашей формы?

Будет сформирован обработчик этого события со следующим заголовком:

private void button1_Click(object sender, EventArgs e).

5 Что определяет первый формальный параметр всех обработчиков сообщений?

Он определяет отправителя сообщения, иногда говорят источник сообщения.

6 Что определяет второй формальный параметр обработчиков сообщений?

Второй формальный параметр шаблонов обработчиков событий является переменная типа объект точнее ссылкой на объект класса ХХХEventArgs, который содержит связанные с событием параметры фактически это сообщение.

7 Где перечислены события, на которые должны реагировать элементы управления формы?

Для каждого элемента в файле Form1.Designer.cs, в разделе инициализации помимо определения свойств элементов управления, определяются

Продолжение приложения А

перечень событий, на которые должен реагировать этот элемент управления.

8 Как можно объединить все события класса?

Поскольку все методы обработчиков событий имеют единый формат записи, то их можно объединять (подписывать) с помощью многоадресных делегатов.

9 Где происходит добавление событий в многоадресный делегат формы?

Это происходит в методе InitializeComponent() с помощью операций присваивания, например,

this.MouseClick += new System.Windows.Forms.MouseEventHandler

(this.Form1_MouseClick);

10 Где объявляется многоадресный делегат формы?

В файле Form1.Designer.cs, он находится «по умолчанию».



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: