Figures xv Tables xvii Foreword xix Preface xxiii Acknowledgments xxxv About the Authors xxxvii Chapter 1 : Introducing C# 1 Hello, World 2 C# Syntax Fundamentals 4 Console Input and Output 17 Chapter 2 : Data Types 33 Fundamental Numeric Types 34 More Fundamental Types 43 null and void 53 Categories of Types 57 Nullable Modifier 60 Conversions between Data Types 60 Arrays 67 Chapter 3: Operators and Control Flow 85 Operators 86 Introducing Flow Control 103 Code Blocks ({}) 110 Code Blocks, Scopes, and Declaration Spaces 112 Boolean Expressions 114 Bitwise Operators (>, , &, ^, ~) 121 Control Flow Statements, Continued 127 Jump Statements 139 C# Preprocessor Directives 145 Chapter 4: Methods and Parameters 155 Calling a Method 156 Declaring a Method 163 The using Directive 168 Returns and Parameters on Main() 172 Advanced Method Parameters 175 Recursion 184 Method Overloading 186 Optional Parameters 189 Basic Error Handling with Exceptions 194 Chapter 5: Classes 209 Declaring and Instantiating a Class 213 Instance Fields 217 Instance Methods 219 Using the this Keyword 220 Access Modifiers 227 Properties 229 Constructors 244 Static Members 255 Extension Methods 265 Encapsulating the Data 267 Nested Classes 269 Partial Classes 272 Chapter 6: Inheritance 277 Derivation 278 Overriding the Base Class 290 Abstract Classes 302 All Classes Derive from System.Object 308 Verifying the Underlying Type with the is Operator 309 Conversion Using the as Operator 310 Chapter 7: Interfaces 313 Introducing Interfaces 314 Polymorphism through Interfaces 315 Interface Implementation 320 Converting between the Implementing Class and Its Interfaces 326 Interface Inheritance 326 Multiple Interface Inheritance 329 Extension Methods on Interfaces 330 Implementing Multiple Inheritance via Interfaces 331 Versioning 334 Interfaces Compared with Classes 336 Interfaces Compared with Attributes 337 Chapter 8: Value Types 339 Structs 340 Boxing 349 Enums 358 Chapter 9: Well-Formed Types 371 Overriding object Members 371 Operator Overloading 385 Referencing Other Assemblies 393 Defining Namespaces 398 XML Comments 402 Garbage Collection 407 Resource Cleanup 410 Lazy Initialization 419 Chapter 10: Exception Handling 423 Multiple Exception Types 424 Catching Exceptions 426 General Catch Block 430 Guidelines for Exception Handling 432 Defining Custom Exceptions 435 Wrapping an Exception and Rethrowing 438 Chapter 11: Generics 443 C# without Generics 444 Introducing Generic Types 449 Constraints 462 Generic Methods 476 Covariance and Contravariance 481 Generic Internals 489 Chapter 12: Delegates and Lambda Expressions 495 Introducing Delegates 496 Lambda Expressions 506 Anonymous Methods 512 General-Purpose Delegates: System.Func and System.Action 514 Chapter 13: Events 533 Coding the Observer Pattern with Multicast Delegates 534 Events 548 Chapter 14: Collection Interfaces with Standard Query Operators 561 Anonymous Types and Implicitly Typed Local Variables 562 Collection Initializers 568 What Makes a Class a Collection: IEnumerable 571 Standard Query Operators 577 Chapter 15: LINQ with Query Expressions 613 Introducing Query Expressions 614 Query Expressions Are Just Method Invocations 632 Chapter 16: Building Custom Collections 635 More Collection Interfaces 636 Primary Collection Classes 638 Providing an Indexer 655 Returning Null or an Empty Collection 659 Iterators 660 Chapter 17: Reflection, Attributes, and Dynamic Programming 677 Reflection 678 Attributes 688 Programming with Dynamic Objects 714 Chapter 18: Multithreading 727 Multithreading Basics 730 Working with System.Threading 737 Asynchronous Tasks 745 Canceling a Task 764 The Task-Based Asynchronous Pattern in C# 5.0 770 Executing Loop Iterations in Parallel 794 Running LINQ Queries in Parallel 804 Chapter 19: Thread Synchronization 811 Why Synchronization? 813 Timers 841 Chapter 20: Platform Interoperability and Unsafe Code 845 Using the Windows Runtime Libraries from C# 846 Platform Invoke 849 Pointers and Addresses 862 Executing Unsafe Code via a Delegate 872 Chapter 21: The Common Language Infrastructure 875 Defining the Common Language Infrastructure (CLI) 876 CLI Implementations 877 C# Compilation to Machine Code 879 Runtime 881 Application Domains 887 Assemblies, Manifests, and Modules 887 Common Intermediate Language (CIL) 890 Common Type System (CTS) 891 Common Language Specification (CLS) 891 Base Class Library (BCL) 892 Metadata 892 Appendix A: Downloading and Installing the C# Compiler and CLI Platform 897 Microsoft''s .NET 897 Appendix B: Tic-Tac-Toe Source Code Listing 901 Appendix C: Interfacing with Mutithreading Patterns Prior to the TPL and C# 5.0 907 Asynchronous Programming Model 908 Asynchronous Delegate Invocation 921 The Event-Based Asynchronous Pattern (EAP) 924 Background Worker Pattern 928 Dispatching to the Windows UI 932 Appendix D: Timers Prior to the Async/Await Pattern of C# 5.
0 937 Index 943 Index of C# 5.0 Topics 974 Index of C# 4.0 Topics 975 Index of C# 3.0 Topics 984.