Codeblocks are a datatype in Clipper and Visual Objects (and Vulcan.NET). In .NET there are Lambda expressions for the same purpose. X# permits also the codeblock syntax for lambda expressions and is smart enough to create the correct code.
{ x, y => x * y }
No parentheses are needed. Parameters may also be completely skipped:
{ => Console.WriteLine("Lamda without Parameters") }
{ x as Int, y as Int => x * y }
Note that the parameters for AME must be typed.
DELEGATE ( x as Int, y as Int) { x * y }
DELEGATE { Console.WriteLine("A Delegate without params")}
Some examples of this in use:
FUNCTION TestAnonymous() AS VOID LOCAL oForm AS Form oForm := Form{} // Anonymous method expression with 2 statements. Note that the // first statement must appear on the line following the opening Curly // and the closing curly must be on a separate line after the statements // (because the statement list 'eats' the end of lines) oForm:Click += DELEGATE(o AS System.Object, e AS System.EventArgs ) { System.Windows.Forms.MessageBox.Show("Click 1!") System.Windows.Forms.MessageBox.Show("Click 2!") } // Lambda Expression with untyped parameters and single expression oForm:Click += { o,e => System.Windows.Forms.MessageBox.Show("Lamda Untyped!") } // Lambda Expression with untyped parameters and single expression. // For readability here split over 2 lines with a semicolon that indicates // that the statement is continued on the next line oForm:Click += { o as Object,e as EventArgs ; => System.Windows.Forms.MessageBox.Show("Lamda Typed!") } oForm:ShowDialog() RETURN
Source: Codeblock syntax and Lambda expressions - X# Forum post by Robert v.d.Hulst