Иллюстрированный самоучитель по Architecture .NET

Моделирование фондовой биржи

Определение делегата

В файле Engine.h объявлены два делегата.

_delegate void TickCallback(int ticks);
_delegate void TradeCallback(
int ticks, String *pStock, int price, int volume);

Как мы уже знаем, делегат подобен классу, так что экземпляр делегата создается с помощью оператора new (создать).

TickCallback *pTickDlg =
new TickCallback(0, PrintTick); //0 для статического
TradeCallback *pTradeDlg =
new TradeCallback(0, PrintTrade); //0 для статического

Имя метода передается делегату в качестве аргумента его конструктора. Сигнатура метода должна совпадать с сигнатурой делегата.

static void PrintTick(int ticks)
{
Console::Write("{0} ", _box(ticks));
if (++printcount == LINECOUNT)
{
Console::WriteLine(); printcount = 0;
}
}
static void PrintTrade(
int ticks, String *pStock, int price, int volume)
{
if (printcount!= 0)
{
Console::WriteLine();
}
printcount = 0;
Console::WriteLine("{0.4} {l,-4} {2.4} {3.4}",
_box(ticks), pStock,
_box(price), _box(volume));
}

Передача информации о делегате эмулятору

Класс Admin (Управляющий модуль) передает информацию об используемом делегате классу Engine (Машинный модуль) при вызове конструктора класса Engine (Машинный модуль).

Engine *pEngine = new Engine(pTickDlg, pTradeDlg);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.