Contents of C# 4.0 Topics xxv Figures xxvii Tables xxix Foreword xxxi Preface xxxv Acknowledgments xlvii About the Author li Chapter 1: Introducing C# 1 Hello, World 2 C# Syntax Fundamentals 4 Working with Variables 12 Console Input and Output 16 Comments 20 Managed Execution and the Common Language Infrastructure 23 C# and .NET Versioning 26 Common Intermediate Language and ILDASM 27 Summary 30 Chapter 2: Data Types 31 Fundamental Numeric Types 32 More Fundamental Types 40 null and void 51 Categories of Types 55 Nullable Modifier 57 Conversions between Data Types 58 Arrays 64 Summary 81 Chapter 3: Operators and Control Flow 83 Operators 84 Introducing Flow Control 98 Code Blocks ({}) 105 Scope and Declaration Space 107 Boolean Expressions 109 Bitwise Operators (>, , &, ^, ~) 115 Control Flow Statements, Continued 121 Jump Statements 132 C# Preprocessor Directives 138 Summary 145 Chapter 4: Methods and Parameters 149 Calling a Method 150 Declaring a Method 157 The using Directive 161 Returns and Parameters on Main() 165 Parameters 168 Recursion 176 Method Overloading 179 Optional Parameters 182 Basic Error Handling with Exceptions 186 Summary 199 Chapter 5: Classes 201 Declaring and Instantiating a Class 205 Instance Fields 209 Instance Methods 211 Using the this Keyword 213 Access Modifiers 220 Properties 222 Constructors 236 Static Members 247 Extension Methods 256 Encapsulating the Data 258 Nested Classes 260 Partial Classes 262 Summary 267 Chapter 6: Inheritance 269 Derivation 270 Overriding the Base Class 281 Abstract Classes 293 All Classes Derive from System.Object 299 Verifying the Underlying Type with the is Operator 301 Conversion Using the as Operator 302 Summary 303 Chapter 7: Interfaces 305 Introducing Interfaces 306 Polymorphism through Interfaces 307 Interface Implementation 312 Converting between the Implementing Class and Its Interfaces 318 Interface Inheritance 318 Multiple Interface Inheritance 321 Extension Methods on Interfaces 322 Implementing Multiple Inheritance via Interfaces 323 Versioning 326 Interfaces Compared with Classes 328 Summary 329 Chapter 8: Value Types 331 Structs 332 Boxing 339 Enums 346 Summary 356 Chapter 9: Well-Formed Types 357 Overriding object Members 357 Operator Overloading 369 Referencing Other Assemblies 377 Defining Namespaces 382 XML Comments 385 Garbage Collection 390 Resource Cleanup 393 Lazy Initialization 400 Summary 403 Chapter 10: Exception Handling 405 Multiple Exception Types 405 Catching Exceptions 407 General Catch Block 409 Guidelines for Exception Handling 411 Defining Custom Exceptions 414 Summary 419 Chapter 11: Generics 421 C# without Generics 422 Introducing Generic Types 427 Constraints 439 Generic Methods 453 Covariance and Contravariance 457 Generic Internals 463 Summary 467 Chapter 12: Delegates and Lambda Expressions 469 Introducing Delegates 470 Anonymous Methods 480 System-Defined Delegates: Func<> 483 Lambda Expressions 486 Summary 506 Chapter 13: Events 507 Coding the Observer Pattern with Multicast Delegates 508 Events 523 Summary 533 Chapter 14: Collection Interfaces with Standard Query Operators 535 Anonymous Types and Implicitly Typed Local Variables 536 Collection Initializers 543 What Makes a Class a Collection: IEnumerable 546 Standard Query Operators 552 Summary 586 Chapter 15: LINQ with Query Expressions 589 Introducing Query Expressions 590 Query Expressions as Method Invocations 608 Summary 609 Chapter 16: Building Custom Collections 611 More Collection Interfaces 612 Primary Collection Classes 617 Providing an Index Operator 630 Returning Null or an Empty Collection 634 Iterators 634 Summary 650 Chapter 17: Reflection, Attributes, and Dynamic Programming 651 Reflection 652 Attributes 663 Programming with Dynamic Objects 688 Summary 699 Chapter 18: Multithreading 701 Running and Controlling a Separate Thread 706 Executing Iterations in Parallel 724 Running LINQ Queries in Parallel 734 Multithreading before .NET Framework 4 738 Unhandled Exceptions on the AppDomain 744 Summary 746 Chapter 19: Synchronization and More Multithreading Patterns 749 Synchronization 750 Timers 778 Asynchronous Programming Model 783 Asynchronous Delegate Invocation 797 Event-Based Asynchronous Pattern (EAP) 801 Background Worker Pattern 804 Windows UI Programming 809 Summary 814 Chapter 20: Platform Interoperability and Unsafe Code 815 Platform Invoke 816 Pointers and Addresses 830 Summary 839 Chapter 21: The Common Language Infrastructure 843 Defining the Common Language Infrastructure (CLI) 844 CLI Implementations 845 C# Compilation to Machine Code 847