Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

Int size; // размер массива

Int[ ] ar; // ссылка на массив

public long count; // счетчик обменов при сортировке

public event SortHandler onSort; // объявление события

public Sorting(int[ ] ls) // конструктор

{

size = ls.Length;

count = 0;

ar = ls;

}

public void sort( ) // сортировка с посылкой извещений

{

Int temp;

for (int i = 0; i < size - 1; i++)

{

for (int j = i + 1; j < size; j++)

if (ar[i] > ar[j])

{

temp = ar[i];

ar[i] = ar[j];

ar[j] = temp;

count++;

}

if (onSort != null)

onSort(count, size, i); // генерация события

}

}

}

class View

{ // Обработчик событий в объектах:

public void nShow(long n, int si, int kl)

{

Console.Write("\r" + n);

}

}

class Display // Обработчик событий в этом классе

{

static int len=30;

static string st = null;

public static void barShow(long n, int si, int kl)

{

int pos = Math.Abs((int)((double)kl / si * len));

string s1 = new string('\u258c', pos);

string s2 = new string('-', len - pos-1) +

'\u25c4'; // unicode для треугольника;

st = s1 + '\u258c' + s2; //'\u258c' - код прямоугольника

Console.Write("\r\t\t" + st);

}

}

class Controller

{

static void Main()

{

Random ran = new Random(55);

int[ ] ar = new int[19999];

for (int i = 0; i < ar.Length; i++)

ar[i] = ran.Next( );

Sorting run = new Sorting(ar);

View watch = new View( ); // Создан объект

run.onSort += new SortHandler(Display.barShow);

run.onSort += new SortHandler(watch.nShow);

run.sort( );

Console.Write("\n");

}

}

Результат выполнения программы:

1

0 0 3 7

2

6

1

0

▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌◄

Обратите внимание, что событийный делегат SortHandler и переменная

события onSort, должны быть одинаково доступны в месте подписки на событие.

При генерации события целесообразно проверять значение переменной

события. Эта переменная остаётся равной null, если на событие нет ни одной

подписки.

Обратите внимание на тот факт, что генерация события "событие:генерация

события" , в отличие от генерации исключения, оформляется как обращение к

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

возвращается в точку, непосредственно следующую за оператором генерации

события.

Контрольные вопросы

В чём основное назначение делегата?

Назовите этапы применения делегатов.

Члены каких видов могут присутствовать в делегате-типе?

Объясните назначение элементов объявления делегата-типа.

Как объявить ссылку с типом делегата?

Как создать экземпляр делегата?

Как аргументы можно использовать при обращении к конструктору делегата?

Где может размещаться объявление делегата-типа?

Каковы возможности свойств Method и Target?

Для чего применяются массивы делегатов?

Что такое многоадресный экземпляр делегата?

Какие средства поддерживают работу с многоадресными экземплярами

делегатов?

Как получить массив делегатов из многоадресного делегата?

Что такое механизм обратного вызова?

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

Что такое анонимный метод?

Как специфицируется сигнатура анонимного метода?

Приведите пример размещения анонимного метода в обращении к методу,

требующему обратных вызовов.

Что такое событие в языке C# ?

Объясните синтаксис оператора посылки сообщения.

Приведите формат объявления события.

Что такое переменная события?

Что определяет делегат, указанный в объявлении события?

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

Назовите этапы работы с событиями.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky