Listing 5
using namespace System;
delegate void D(int x);
void F1(int i) { Console::WriteLine("F1: {0}", i); }
void F2(int i) { Console::WriteLine("F2: {0}", i); }
int main()
{
D^ cd1 = gcnew D(&F1);
D^ cd2 = gcnew D(&F2);
/*1*/ D^ list1 = cd1 + cd2; // F1 + F2
/*2*/ D^ list2 = cd2 + cd1; // F2 + F1
D^ cd3 = nullptr;
/*3a*/ cd3 = list2 + list1; // F2 + F1 + F1 + F2
cd3(10);
/*3b*/ cd3 = list1 + list2; // F1 + F2 + F2 + F1
cd3(20);
/*4a*/ cd3 = list1 + list2; // F1 + F2 + F2 + F1
/*4b*/ cd3 -= cd1 + cd2; // F2 + F1
cd3(30);
/*5a*/ cd3 = list1 + list2; // F1 + F2 + F2 + F1
/*5b*/ cd3 -= cd2 + cd2; // F1 + F1
cd3(40);
/*6a*/ cd3 = list1 + list2; // F1 + F2 + F2 + F1
/*6b*/ cd3 -= cd2 + cd1; // F1 + F2
cd3(50);
/*7a*/ cd3 = list1 + list2; // F1 + F2 + F2 + F1
/*7b*/ cd3 -= cd1 + cd1; // F1 + F2 + F2 + F1
cd3(60);
}