| Acknowledgments | xxi |
| Introduction | xxiii |
Part I | Windows Applications | |
Chapter 1 | Language Foundations | 3 |
| Object-Oriented Basics | 4 |
| Operator Overloading | 31 |
| Attributes | 33 |
| Reflection | 34 |
| Summary | 34 |
Chapter 2 | Assembly Viewer | 35 |
| Demonstrated Topics | 36 |
| Code Listing for the Assembly Manager | 36 |
| Secondary Topics | 49 |
| Summary | 62 |
Chapter 3 | Video Kiosk | 63 |
| Demonstrated Topics | 64 |
| What Is GDI+? | 64 |
| Examining the PlayControl | 67 |
| Secondary Topics | 93 |
| Summary | 100 |
Chapter 4 | Terrarium | 101 |
| Demonstrated Topics | 102 |
| Downloading, Installing, and Configuring Terrarium | 103 |
| Playing Terrarium | 107 |
| Reviewing the Terrarium Framework | 116 |
| Creating Plants and Critters | 116 |
| Introducing Plants and Critters to the Terrarium | 128 |
| Secondary Topics | 129 |
| Serializing Objects | 129 |
| Summary | 132 |
Chapter 5 | Building Database Applications with ADO.NET | 133 |
| Demonstrated Topics | 134 |
| A Quick Review of ADO.NET Namespaces | 135 |
| Connecting to DataSources | 135 |
| Understanding the Role of the Adapter | 143 |
| Working with the DataSet | 150 |
| Using the DataTable | 155 |
| Using the DataView | 158 |
| Using the DataReader for Read-Only Data | 159 |
| Displaying Information in the DataGrid | 159 |
| Using the Command Object | 161 |
| Generating SQL with the CommandBuilder | 162 |
| Secondary Topics | 162 |
| Binding a DataSet to a DataGrid | 163 |
| Returning a DataSet from a Web Service | 163 |
| Implementing a TraceListener | 164 |
| Summary | 166 |
Part II | Tools and Components | |
Chapter 6 | Customizing Visual Studio .NET | 169 |
| Demonstrated Topics | 170 |
| Creating a Custom Wizard | 170 |
| Creating a Project Template for Visual Studio .NET Wizards | 175 |
| Extending Visual Studio .NET with Wizards | 184 |
| Secondary Topics | 198 |
| Returning to Jscript .NET | 198 |
| Using the regasm Utility | 199 |
| Summary | 200 |
Chapter 7 | Event Logger | 201 |
| Demonstrated Topics | 202 |
| Exploring System.Diagnostics Namespace | 203 |
| Using the EventLog Component | 203 |
| Tracing as a Debugging Strategy | 207 |
| Dumping the Stack | 209 |
| Managing Debug Code Automatically | 211 |
| Implementing the Logger | 216 |
| Secondary Topics | 221 |
| Creating Dialog Boxes | 221 |
| FileVersion Information | 224 |
| Using the Debug Class | 225 |
| Measuring Performance | 228 |
| Summary | 230 |
Chapter 8 | Creating UserControls | 231 |
| Demonstrated Topics | 232 |
| Understanding UserControls | 232 |
| Creating a ButtonCluster Control | 234 |
| Creating a PickList Control | 244 |
| Implementing an AboutBox Control | 246 |
| Defining a Data Bound UserControl | 248 |
| Custom Painting in UserControls | 253 |
| Transparent UserControl Background | 254 |
| Extending UserControls Through Inheritance | 254 |
| Secondary Topics | 255 |
| Loading ListBoxes | 255 |
| Dynamically Positioning and Sizing Controls | 258 |
| Summary | 259 |
Chapter 9 | Special Effects Text | 261 |
| Demonstrated Topics | 262 |
| Rapid Control Prototyping | 262 |
| Creating a Class Library | 268 |
| Testing Your Component | 278 |
| Adding the Component to the Toolbox | 280 |
| Creating a Merge Module | 281 |
| Secondary Topics | 282 |
| Creating a Type Converter | 282 |
| Implementing a Type Editor | 291 |
| Applying the Custom Editor with the EditorAttribute | 296 |
| Defining a Windows Forms Designer | 297 |
| Summary | 298 |
Chapter 10 | Creating Custom Attributes | 301 |
| Demonstrated Topics | 302 |
| Defining the Custom Attribute Class | 303 |
| Implementing an Attribute Constructor | 303 |
| Adding Other Members to Custom Attributes | 305 |
| Applying the AttributeUsageAttribute | 306 |
| Reading Attributes | 307 |
| Secondary Topics | 309 |
| Commenting Attributes | 309 |
| Implementing Extender Provider | 311 |
| Reviewing the EditorBrowsableAttribute | 315 |
| Reviewing the DesignerSerializationVisibilityAttribute | 316 |
| Summary | 318 |
Chapter 11 | Practical Reflection | 319 |
| Demonstrated Topics | 320 |
| Discovering and Using Types Dynamically | 320 |
| Exploring the .NET Framework with Reflection | 337 |
| Emitting Dynamic Assemblies | 348 |
| Secondary Topics | 363 |
| Reflection and Web Services | 363 |
| Implementing the Metaclass Idiom | 364 |
| Serializing Objects | 365 |
| Emitting Regular Expression Assemblies | 366 |
| Summary | 367 |
Part III | Web Applications--IBUYSPY Portal | |
Chapter 12 | Implementing Web Services | 371 |
| Demonstrated Topics | 372 |
| Web Services: Discovery and Description | 372 |
| Testing Web Services | 379 |
| Creating a Simple Web Service | 380 |
| Returning Complex Data from a Web Service | 388 |
| Returning a DataSet from a Web Service | 392 |
| Secondary Topics | 393 |
| Summary | 397 |
Chapter 13 | IBuySpy and Dynamic User Interfaces in ASP.NET | 399 |
| Demonstrated Topics | 400 |
| Creating a Cascading Style Sheet | 401 |
| Implementing the Portal Banner | 408 |
| Secondary Topics | 432 |
| Administrating the Portal | 432 |
| Debugging the IBUYSPY Portal | 434 |
| Introducing Mobile Modules | 434 |
| Summary | 434 |
Chapter 14 | Creating Custom Web Controls | 435 |
| Demonstrated Topics | 436 |
| Rendering Controls Dynamically | 436 |
| Reviewing the PortalModuleControl Base Control | 446 |
| Binding the Tabs Data | 447 |
| Visually Designing the Signln Module | 449 |
| Creating the Image Module | 451 |
| Creating the Links Module | 452 |
| Implementing the XML/XSL Transform Module | 457 |
| Creating a Custom Portal Module | 462 |
| Secondary Topics | 465 |
| Using the HttpServerUtility | 466 |
| Using the Repeater Control | 467 |
| Summary | 468 |
Chapter 15 | Output Caching and Persisting State Information | 469 |
| Demonstrated Topics | 470 |
| Output Caching Pages | 471 |
| Caching Partial Pages | 484 |
| Caching Data | 486 |
| Using the Session Cache | 495 |
| Using the Application Cache | 500 |
| Secondary Topics | 500 |
| Configuring the Session State Server | 501 |
| Configuring the SQL Server for Session Management | 503 |
| Summary | 504 |
Chapter 16 | Security and Authentication | 505 |
| Demonstrated Topics | 506 |
| Using Windows NTLM Authentication | 507 |
| Implementing Forms Authentication with Cookies | 509 |
| Implementing the Signln Module | 520 |
| Administering Users | 521 |
| Secondary Topics | 522 |
| Implementing Code Access Security | 523 |
| Index | 529 |