Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Пример 8.3.1. Событие и делегат.

///////////////

//C#

using System;

// Объявить глобальный DelGlob делегата

public delegate void DelGlob (string s);

class A

{

// Объявить локальный делегат DelLoc

public delegate void DelLoc (string s);

// Объявить ссылку на локальное событие

public event DelLoc evLoc;

// Объявить ссылку на глобальное событие

public event DelGlob evGlob;

// Вызвать локальное событие

public void GenerateLoc (string s)

{

Console.WriteLine ("DelLoc:" + s);

if (evLoc != null) evLoc (s); /* Если событие инициировано,

то генерировать событие */

}

// Вызвать глобальное событие

public void GenerateGlob (string s)

{

Console.WriteLine("DelGlob:" + s);

if (evGlob != null) evGlob (s);/* Если событие инициировано, то

генерировать событие*/

}

}

class Test

{

static void Main ()

{

// Создать объект класса А

A a= new A();

// Инициировать и сгенерировать глобальное событие

Console.WriteLine ( "----l----DelGlob----" ) ;

a.evGlob+= new DelGlob (Test.Handler);

a.GenerateGlob ("First");

//a.evGlob ("Second"); // Error:

// The event "A.evGlob' can only appear on the left hand

// slde of += or -=the (except when used from wlthln the type А

//A.evGlob ("Second"); // Error:

// The event "A.evGlob' can only appear on the left hand

// side of += or -=the (except when used from within the type А

// Инициировать и сгенерировать локальное событие

Console.WriteLine ( "----2----DelLoc----" ) ;

a.evLoc+= new A.DelLoc (Test.Handler);

a.GenerateLoc ("First");

//a.evLoc ("Second"); // Error:

// The event "A.evGlob' can only appear on the left hand

// side of += or -=the (except when used from within the type А

//A.evLoc ("Second"); // Error:

// The event "A.evGlob' can only appear on the left hand

// slde of += or -=the (except when used from wlthin the type А

Console.ReadKey();

}

static void Handler (string s)

{

Console.WriteLine ("Получил:" + s);

}

}

Результат:

----l----DelGlob----

DelGlob:First

Получил:First

----2----DelLoc----

DelLoc:First

Получил:First

///////////////

// C++/CLI

#include "stdafx.h"

using namespace System;

// Объявить глобальный делегат DelGlob

delegate void DelGlob (String^ s);

ref class A

{

public:

// Объявить локальный делегат DelLoc

delegate void DelLoc (String^ s);

// Объявить дескриптор на локальное событие

event DelLoc ^evLoc;

// Объявить дескриптор на глобальное событие

event DelGlob ^evGlob;

// Вызвать локальноое событие

void GenerateLoc (String^ s)

{

Console::WriteLine("DelLoc: {0}", s);

evLoc(s); // Генерировать событие

}

// Вызвать глобальное событие

void GenerateGlob (String^ s)

{

Console::WriteLine("DelGlob: {0}", s);

evGlob(s); // Генерировать событие

}

};

ref class B

{

public:

static void Handler (String^ s)

{

Console::WriteLine ("Получил: {0}", s);

}

};