// EventPractice.cpp: 主项目文件。
#include "stdafx.h"
using namespace System;
delegate void f( int );
public ref struct E {
private:
f^ _E; //是的,委托也是引用类型
public:
E()
{ // 注意 0 换成了 nullptr!
_E = nullptr;
}
// V2 中显式事件声明的语法聚合
event f^ E1
{
public:
void add( f^ d )
{
_E += d;
}
protected:
void remove( f^ d )
{
_E -= d;
}
//private:
// void raise( int i )
// {
// if ( _E )
// _E( i );
// }
}
void handler( int i)
{
Console::Write(Convert::ToString(i));
}
void TrigEvent(int i)
{
if(_E!=nullptr)
_E(i);
}
static void Go()
{
E^ pE = gcnew E;
pE->E1 += gcnew f( pE, &E::handler );
pE->_E( 17 );
pE->E1 += gcnew f( pE, &E::handler );
pE->_E( 17 );
}
};
int main(array<System::String ^> ^args)
{
E^ pE = gcnew E;
pE->E1 += gcnew f( pE, &E::handler );
pE->E1 += gcnew f( pE, &E::handler );
pE->TrigEvent(3);
Console::ReadLine();
return 0;
}