using System;
using System.Threading;
+using System.Reflection;
class I {
}
class X {
+
+ public delegate int Foo (int i, int j);
private void Thread_func () {
Console.WriteLine ("Inside the thread !");
}
+
+ public int Func (int i, int j)
+ {
+ return i+j;
+ }
+
+ public void Bar ()
+ {
+ Foo my_func = new Foo (Func);
+
+ int result = my_func (2, 4);
+
+ Console.WriteLine ("Answer is : " + result);
+ }
+
+ static bool MyFilter (MemberInfo mi, object criteria)
+ {
+ Console.WriteLine ("You passed in : " + criteria);
+ return true;
+ }
public static int Main ()
{
I.GetTextFn _ = I.GetText;
- X t = new X ();
+ Console.WriteLine ("Value: " + I.GetText);
+ X x = new X ();
- Thread thr = new Thread (new ThreadStart (t.Thread_func));
+ Thread thr = new Thread (new ThreadStart (x.Thread_func));
thr.Start ();
Console.WriteLine ("Inside main ");
Console.WriteLine (_("Hello"));
+ x.Bar ();
+
+ MemberFilter filter = new MemberFilter (MyFilter);
+
+ Type t = x.GetType ();
+
+ MemberInfo [] mi = t.FindMembers (MemberTypes.Method, BindingFlags.Static | BindingFlags.NonPublic,
+ Type.FilterName, "MyFilter");
+
+ Console.WriteLine ("FindMembers called, mi = " + mi);
+ Console.WriteLine (" Count: " + mi.Length);
+ if (!filter (mi [0], "MyFilter"))
+ return 1;
+
+ //
+ // This test is used to call into a delegate defined in a separate
+ // namespace, but which is still not a nested delegate inside a class
+ //
+ NameSpace.TestDelegate td = new NameSpace.TestDelegate (multiply_by_three);
+
+ if (td (8) != 24)
+ return 30;
+
+ //
+ // Check the names that were used to define the delegates
+ //
+ if (td.GetType ().FullName != "NameSpace.TestDelegate")
+ return 31;
+
+ if (_.GetType ().FullName != "I+GetTextFn")
+ return 32;
+
+ Console.WriteLine ("Test passes");
+
return 0;
}
+
+ static int multiply_by_three (int v)
+ {
+ return v * 3;
+ }
+
+}
+
+namespace NameSpace {
+
+ public delegate int TestDelegate (int a);
+
+}
+
+
+namespace TestNamespace
+{
+ public class TestClass
+ {
+ public delegate float NotWorkingDelegate(float point, params object [] hiddenParams);
+ }
}