static void Main(string[] args)
        {
            Action putLine = () => { Console.Write("\n"); };

            "Demonstrating Reflection".title('=');
            putLine();

            "Reflecting on ReflectionTest class".title();
            putLine();

            ReflectionTest rt = new ReflectionTest();

            ReflectionDemo.showTypeDetails(rt);
            putLine();

            "Reflecting on ReflectionTest's delegate sayHandler".title();
            putLine();

            Program pr = new Program();

            rt.sayHandler += new ReflectionTest.SayHandler(pr.handleNotifications);
            ReflectionDemo.showTypeDetails(rt.sayHandler);
            putLine();

            "Invoking lambda defined in main".title();
            putLine();

            string localMsg           = " and localMsg";
            Action <string, bool> act = (msg, boolValue) => {
                Console.Write("\n  this is lambda invocation: \"{0}\"", msg + localMsg);
                Console.Write("\n  second argument is {0}", boolValue);
            };

            act.Invoke("lambda argument", true);
            putLine();

            "Reflecting on lamda bound to Action<string>".title();
            putLine();
            ReflectionDemo.showTypeDetails(act);

            "Reflecting on Action's Target".title();
            putLine();
            ReflectionDemo.showTypeDetails(act.Target);
        }