Professional
1l6xhbR
1l6xhbR
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436<br />
Quick reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .437<br />
Chapter 20 Decoupling application logic and handling events 439<br />
Understanding delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .440<br />
Examples of delegates in the .NET Framework class library . . . . . .441<br />
The automated factory scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443<br />
Implementing the factory control system without using<br />
delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443<br />
Implementing the factory by using a delegate . . . . . . . . . . . . . . . 444<br />
Declaring and using delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .447<br />
Lambda expressions and delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .455<br />
Creating a method adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .455<br />
Enabling notifications by using events . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456<br />
Declaring an event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456<br />
Subscribing to an event. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457<br />
Unsubscribing from an event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457<br />
Raising an event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458<br />
Understanding user interface events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458<br />
Using events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460<br />
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466<br />
Quick reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466<br />
Chapter 21 Querying in-memory data by using<br />
query expressions 469<br />
What is LINQ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .469<br />
Using LINQ in a C# application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470<br />
Selecting data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472<br />
Filtering data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .474<br />
Ordering, grouping, and aggregating data . . . . . . . . . . . . . . . . . . .475<br />
Joining data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477<br />
Using query operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479<br />
Querying data in Tree objects . . . . . . . . . . . . . . . . . . . . . . . .481<br />
LINQ and deferred evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .487<br />
xiv<br />
Contents