Listing 2

using namespace System;
ref struct StrCompare
{
    static int CompareExact(String^ s1, String^ s2)
    {
        Console::WriteLine("Comparing {0} and {1} "
            "using CompareExact", s1, s2);
        // ...
        return 0;
    }
    static int CompareIgnoreCase(String^ s1, String^ s2)
    {
        Console::WriteLine("Comparing {0} and {1}" 
            "using CompareIgnoreCase", s1, s2);
        // ...
        return 0;
    }
};
delegate int Compare(String^ s1, String^ s2);

/*1*/
Compare^ FindComparisonMethod()
{
    // ...
}
void Sort(Compare^ compare)
{
    int result;
/*3*/   result = compare("Hello", "Hello");
/*4*/   result = compare("Hello", "HELLO");
/*5*/   result = compare("Hello", "Hell");
}
int main()
{
/*6*/   Sort(gcnew Compare(&StrCompare::CompareIgnoreCase));
/*7*/   Sort(FindComparisonMethod());
/*8*/   FindComparisonMethod()("Red", "RED");
}