Section 17.4. Using Anonymous Methods


17.4. Using Anonymous Methods

In the previous example, you subscribed to the event by invoking a new instance of the delegate, passing in the name of a method that implements the event:

 theClock.SecondChanged += TimeHasChanged; 

Later in the code, you must define TimeHasChanged as a method that matches the signature of the SecondChangeHandler delegate:

 public void TimeHasChanged(       object theClock, TimeInfoEventArgs ti)     {       Console.WriteLine("Current Time: {0}:{1}:{2}",         ti.hour.ToString(  ),         ti.minute.ToString(  ),         ti.second.ToString(  ));     } 

Anonymous methods allow you to pass a code block rather than the name of the method. This can make for more efficient and easier to maintain code, and the anonymous method has access to the variables in the scope in which they are defined.

 clock.SecondChanged += delegate( object theClock,  TimeInfoEventArgs  ti )     {  Console  .WriteLine( "Current Time: {0}:{1}:{2}",       ti.hour.ToString(  ),       ti.minute.ToString(  ),       ti.second.ToString(  ) );     }; 

Notice that rather than registering an instance of a delegate, you use the keyword delegate , followed by the parameters that would be passed to your method, followed by the body of your method encased in braces and terminated by a semicolon.

This "method" has no name; hence, it is anonymous . You cannot invoke the method except through the delegate; but that is exactly what you want.



Learning C# 2005
Learning C# 2005: Get Started with C# 2.0 and .NET Programming (2nd Edition)
ISBN: 0596102097
EAN: 2147483647
Year: 2004
Pages: 250

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net