| Foreword | p. xiii |
| About the Author | p. xv |
| About the Technical Reviewer | p. xvi |
| Acknowledgments | p. xvii |
| Introduction | p. xix |
| Introducing C# | p. 1 |
| Creating HelloWorld in C# Using the SDK Tools | p. 1 |
| Creating HelloWorld in C# Using Visual Studio .NET | p. 3 |
| Summary | p. 8 |
| Introducting the C# Language | p. 9 |
| The History of Java and C# | p. 9 |
| Understanding Simple Types | p. 10 |
| Introducing Variable Scope | p. 13 |
| Exploring Arrays | p. 13 |
| Understanding Statements and Expressions | p. 15 |
| Introducing Functions and Methods | p. 25 |
| Understanding Types and Objects | p. 28 |
| Introducing Enumerations | p. 49 |
| Understanding Exceptions | p. 50 |
| Using Namespaces and the using Directive | p. 51 |
| Using Documentation Comments | p. 53 |
| Using the Preprocessor | p. 55 |
| Writing Unsafe Code | p. 57 |
| Standardizing C# | p. 57 |
| Summary | p. 58 |
| Introducing the .NET Platform | p. 59 |
| The Pieces of the .NET Platform | p. 59 |
| The Benefits of .NET | p. 62 |
| Summary | p. 66 |
| Using WinForms | p. 67 |
| Creating HelloWorld in WinForms | p. 67 |
| Using WinForms Controls | p. 72 |
| Looking Deeper at Layout | p. 75 |
| Creating Menus | p. 76 |
| Creating Toolbars | p. 81 |
| Adding Help | p. 86 |
| Printing | p. 86 |
| Exploring Multithreading Issues | p. 88 |
| Using the NotifyIcon Control | p. 89 |
| Incorporating ActiveX Controls | p. 91 |
| Summary | p. 95 |
| Building Web Sites with ASP.NET | p. 97 |
| Creating a Simple WebForms Page | p. 97 |
| Using the WebControls | p. 101 |
| Building Your Own Controls | p. 105 |
| Creating ASP.NET Applications | p. 109 |
| Maintaining State | p. 110 |
| Using HttpHandler Pages | p. 112 |
| Comparing ASP.NET to ASP | p. 115 |
| Summary | p. 115 |
| Exploring ADO.NET | p. 117 |
| Using Visual Studio .NET Database Features | p. 117 |
| Comparing a Simple Query in JDBC and ADO.NET | p. 124 |
| Using Command Parameters | p. 130 |
| Using Stored Procedures | p. 131 |
| Using DataSets | p. 133 |
| Understanding Pooling | p. 146 |
| Implementing Data-Bound Controls | p. 146 |
| Comparing ADO.NET to the Current ADO | p. 155 |
| Summary | p. 156 |
| Understanding Multithreading | p. 157 |
| Starting Threads | p. 157 |
| Manipulating Threads | p. 160 |
| Understanding Thread Pooling | p. 162 |
| Using SynchronizationAttribute | p. 164 |
| Using Monitors | p. 165 |
| Using Mutexes | p. 167 |
| Applying Interlocked Access | p. 168 |
| What Is an Apartment? | p. 169 |
| Understanding Threads and Garbage Collection | p. 169 |
| Summary | p. 170 |
| Understanding Networking | p. 171 |
| Starting with Sockets | p. 171 |
| Using Pluggable Protocols | p. 174 |
| Understanding Remoting | p. 175 |
| Using ASP.NET Web Services | p. 181 |
| Summary | p. 203 |
| Working with XML | p. 205 |
| Introducing the System.XML Classes | p. 205 |
| Using XML DOM | p. 206 |
| Implementing XmlReader and XmlWriter Instead of SAX | p. 209 |
| Understanding XML Schema Validation | p. 209 |
| Implementing XSLT Transforms | p. 211 |
| Using XPath Expressions | p. 215 |
| Using XML Serialization | p. 217 |
| Working with the XML Schema Definition Tool | p. 220 |
| Using Visual Studio .NET and XML | p. 222 |
| Summary | p. 223 |
| Creating Components | p. 225 |
| Introducing .NET Components | p. 225 |
| Understanding COM | p. 246 |
| Understanding COM+ | p. 252 |
| Looking to ObjectSpaces | p. 265 |
| Summary | p. 265 |
| Packaging and Installing Applications | p. 267 |
| Another Look at Assemblies | p. 267 |
| Using xcopy Deployment | p. 268 |
| Using CAB Files | p. 268 |
| Using Windows Installer | p. 268 |
| Launching from Internet Explorer | p. 276 |
| Installing into the Global Assembly Cache | p. 280 |
| Setting Dynamic Properties | p. 283 |
| Integrating Installation Components | p. 288 |
| Summary | p. 295 |
| Communicating via Message Queuing | p. 297 |
| Configuring Message Queuing | p. 297 |
| Creating a Message-Queuing API | p. 301 |
| Comparing Message Queuing to JMS | p. 314 |
| Using the Message Queuing Installation Component | p. 314 |
| Summary | p. 315 |
| Using Active Directory Service Interface | p. 317 |
| Reading Directory Entries | p. 317 |
| Adding and Modifying Directory Entries | p. 319 |
| Using Providers | p. 322 |
| Comparing ADSI to JNDI | p. 323 |
| Summary | p. 323 |
| Developing Windows Services | p. 325 |
| Creating a Windows Service | p. 325 |
| Debugging | p. 330 |
| Using SCM Command Handlers | p. 333 |
| Writing to Event Logs | p. 334 |
| Using Performance Counters | p. 336 |
| Creating Setup Projects for Windows Services | p. 340 |
| Summary | p. 341 |
| Getting Outside the Box | p. 343 |
| Using Platform Invoke | p. 343 |
| Writing Unsafe Code | p. 350 |
| Hosting the .NET Runtime | p. 357 |
| Summary | p. 362 |
| Migrating to .NET | p. 363 |
| JUMPing to .NET | p. 363 |
| Exploring Migration Strategies for the Rest of Us | p. 366 |
| Summary | p. 368 |
| Index | p. 369 |
| Table of Contents provided by Syndetics. All Rights Reserved. |