| The .NET Philosophy | p. 1 |
| Introduction | p. 2 |
| Overview of the .NET Platform | p. 2 |
| Examining the .NET Framework Features | p. 4 |
| Understanding the .NET Architecture | p. 13 |
| Following .NET Code from Source to Binary | p. 18 |
| Introducing C# | p. 27 |
| Introduction | p. 28 |
| The C# Language | p. 28 |
| Getting Started | p. 32 |
| Using Different IDEs | p. 40 |
| A Stroll through C# | p. 45 |
| Language Fundamentals | p. 63 |
| Introduction | p. 64 |
| Main() Method | p. 64 |
| Single-Line and Multiline Comments | p. 72 |
| Data Types and the Common Type System | p. 82 |
| Variables | p. 85 |
| Constants | p. 87 |
| Assignment Statements | p. 87 |
| Operators | p. 92 |
| Preprocessor Directives | p. 100 |
| Programming Structures | p. 117 |
| Introduction | p. 118 |
| Strings | p. 118 |
| Flow Control | p. 129 |
| Arrays | p. 137 |
| The foreach Statement | p. 147 |
| Indexers | p. 150 |
| Collections | p. 159 |
| Exceptions | p. 164 |
| Objects and Classes | p. 179 |
| Introduction | p. 180 |
| Using Classes | p. 180 |
| Using Methods | p. 191 |
| Creating Objects | p. 202 |
| Destroying Objects | p. 208 |
| Object-Oriented Programming | p. 217 |
| Introduction | p. 218 |
| Inheritance | p. 218 |
| Polymorphism | p. 226 |
| Inner Classes | p. 244 |
| Using Interfaces | p. 246 |
| Other C# Features | p. 267 |
| Introduction | p. 268 |
| Properties | p. 268 |
| Read-Only Fields | p. 271 |
| Enumerations | p. 272 |
| Boxing and Unboxing | p. 276 |
| Operator Overloading | p. 279 |
| User-Defined Conversions | p. 288 |
| Structs | p. 293 |
| Delegates and Events | p. 305 |
| Introduction | p. 306 |
| Delegates | p. 306 |
| Using Delegates as Callbacks | p. 307 |
| Using Delegates for Event Handling | p. 316 |
| Multicasting | p. 328 |
| Advanced Delegate Usage | p. 331 |
| Attributes and Assemblies | p. 339 |
| Introduction | p. 340 |
| Working with Attributes | p. 340 |
| Using Reflection | p. 352 |
| Creating Assemblies | p. 360 |
| Versioning | p. 364 |
| Multithreading | p. 373 |
| Introduction | p. 374 |
| Threads | p. 374 |
| Creating Threads | p. 375 |
| Managing Threads | p. 380 |
| Scheduling Threads | p. 384 |
| Synchronizing Threads | p. 389 |
| Avoiding Deadlock and Starvation | p. 395 |
| Working with I/O Streams | p. 405 |
| Introduction | p. 406 |
| File System | p. 406 |
| Streams | p. 415 |
| Encoding Data Types | p. 423 |
| Text | p. 428 |
| Network I/O | p. 431 |
| Synchronous vs. Asynchronous | p. 438 |
| Web Streams | p. 441 |
| Serialization | p. 443 |
| Creating User Interfaces with Windows Forms | p. 455 |
| Introduction | p. 456 |
| Windows Form Classes | p. 456 |
| Creating a Windows Form Application | p. 458 |
| Using Controls | p. 460 |
| Handling Events | p. 465 |
| Using a Text Editor | p. 467 |
| Using Visual Studio.NET | p. 470 |
| Web Development with C# | p. 479 |
| Introduction | p. 480 |
| Web Services Overview | p. 480 |
| Creating Web Services | p. 482 |
| Consuming Web Services | p. 495 |
| Web Forms Overview | p. 503 |
| Using Web Form Controls | p. 507 |
| Creating a Web Form Application | p. 515 |
| Working with ActiveX, COM, and Unmanaged Code | p. 527 |
| Introduction | p. 528 |
| Working with Unmanaged Code | p. 529 |
| Working with the Platform Invocation Utility | p. 532 |
| Working with COM Components | p. 535 |
| Working with ActiveX Controls | p. 552 |
| Working with Pointers | p. 559 |
| Microsoft Says JUMP--Java User Migration Path | p. 569 |
| Introduction | p. 570 |
| What Is J#? | p. 571 |
| Using Visual J# | p. 573 |
| Creating a Simple Visual J# Application | p. 578 |
| C# Keywords and Java Equivalents | p. 595 |
| Index | p. 601 |
| Table of Contents provided by Syndetics. All Rights Reserved. |