| Introduction | 1 |
| The Significance of .NET | 1 |
| Evolution vs Revolution | 2 |
| A Clean Slate | 3 |
| So What is .NET? | 4 |
| Advantages of .NET | 5 |
| Where C# Fits In | 8 |
| The New Developer Environment | 9 |
| What you Need to Write C# Code | 10 |
| What This Book Covers | 11 |
| Conventions | 12 |
| Customer Support | 13 |
| Chapter 1 | .NET Architecture | 15 |
| Overview of .NET | 16 |
| What Happens When You Compile and Run a Program | 17 |
| Compilation | 18 |
| Execution | 18 |
| Benefits of Running as Managed Code | 19 |
| Intermediate Language | 20 |
| Classic Object-oriented programming | 21 |
| Value and Reference Types | 22 |
| Strong Typing | 23 |
| Summary of IL Features | 24 |
| Language Interoperability | 24 |
| Common Type System (CTS) | 25 |
| Common Language Specification (CLS) | 27 |
| The .NET Base Class Library | 29 |
| The Components of the .NET Framework | 30 |
| Assemblies | 30 |
| Namespaces | 32 |
| Application Domains | 32 |
| JIT Compilers | 34 |
| .NET Tools | 35 |
| The Garbage Collector | 35 |
| Exceptions | 37 |
| Security | 38 |
| Attributes | 39 |
| Reflection | 39 |
| Languages and Technologies | 39 |
| C# | 40 |
| C++ | 40 |
| J++ | 41 |
| VB | 41 |
| ASP | 41 |
| Scripting Languages | 42 |
| ADO/OLE DB | 42 |
| ADSI | 42 |
| COM and COM+ | 42 |
| Putting It All Together | 42 |
| A Historical Note | 45 |
| Summary | 46 |
| Chapter 2 | Introduction to C# | 49 |
| The Development of C# | 49 |
| The Advent of Assembler | 49 |
| The C Programming Language | 51 |
| Enter VB | 53 |
| Java | 54 |
| C# | 56 |
| C# Compared to Other Languages | 56 |
| Using C# | 60 |
| An Overview of C#'s Features | 65 |
| Using the C# Compiler | 67 |
| Summary | 68 |
| Chapter 3 | C# Basics | 71 |
| Getting Started | 71 |
| C# Data Types | 73 |
| New, Specialized Types in the CTS | 74 |
| Type Safety | 74 |
| C# Predefined Types | 77 |
| Value Types | 78 |
| Reference Types | 82 |
| Complex Types | 85 |
| Value Types | 85 |
| Reference Types | 88 |
| Type Conversions | 93 |
| Boxing and Unboxing | 97 |
| Variables | 98 |
| Identifiers | 99 |
| Variable Scope | 100 |
| Variable Modifiers | 102 |
| Constants | 106 |
| Operators | 106 |
| Operator Shortcuts | 108 |
| The Ternary Operator | 109 |
| checked and unchecked | 110 |
| is | 111 |
| sizeof | 111 |
| typeof | 111 |
| Operator Precedence | 112 |
| Flow Control | 112 |
| Conditional Statements | 112 |
| Looping | 116 |
| Jump Statements | 118 |
| The using Block Statement | 120 |
| Exception Handling | 120 |
| Program Structure | 121 |
| Classes | 121 |
| Namespaces | 127 |
| The Main Method | 131 |
| Compiling C# Files | 133 |
| Console I/O | 135 |
| Comments | 137 |
| XML Documentation | 138 |
| Summary | 141 |
| Chapter 4 | Classes and Inheritance | 143 |
| Before We Begin | 144 |
| A Closer Look at Objects and Classes | 144 |
| Objects in Everyday Life | 144 |
| Objects in Programming | 145 |
| Example: The Authenticator Class | 147 |
| How Classes Are Implemented | 151 |
| Properties | 158 |
| Advantages of Properties | 160 |
| Inheritance | 163 |
| Inheritance in Everyday Life | 163 |
| Inheritance in C#: The Mortimer Phones Sample | 164 |
| Adding Inheritance | 167 |
| The Object Class | 172 |
| Class Hierarchy Diagrams | 176 |
| Virtual and Non-Virtual Methods | 177 |
| Abstract Functions and Base Classes | 182 |
| Sealed Classes and Methods | 186 |
| Calling Base Versions of Methods | 187 |
| Inheritance: Other Topics | 189 |
| OOP Program Architecture | 190 |
| Summary | 192 |
| Chapter 5 | Object Oriented C# | 195 |
| Method Overloading | 196 |
| Defining Overloaded Methods | 197 |
| Calling Overloaded Methods | 198 |
| Requirements for Method Overloads | 200 |
| When to Use Overloading | 201 |
| Construction and Disposal | 202 |
| Constructors | 202 |
| Cleaning up: Destructors | 218 |
| IDisposable | 220 |
| Sample: DestructorDemo | 221 |
| What Happens in Memory: Reference and Value Variables | 224 |
| Structs | 231 |
| Operator Overloading | 235 |
| Indexers | 246 |
| Interfaces | 250 |
| Summary | 255 |
| Chapter 6 | Advanced C# Topics | 257 |
| Errors and Exception Handling | 258 |
| Coding up an Exception | 259 |
| Example: SimpleExceptions | 262 |
| Nested Try Blocks | 270 |
| Exceptions Example: MortimerColdCall | 272 |
| User-Defined Casts | 280 |
| Example: The Currency Struct | 281 |
| Multiple Casting | 288 |
| Delegates | 292 |
| Using Delegates in C# | 294 |
| Simple Delegate Example | 297 |
| Example: BubbleSorter | 299 |
| Multicast Delegates | 302 |
| Events | 304 |
| The Consumer's View of Events | 305 |
| Events Sample: Console Notifications | 307 |
| The C# Preprocessor Directives | 312 |
| #define and #undef | 313 |
| #if, #elif, #else and #endif | 313 |
| #warning and #error | 314 |
| #region and #endregion | 314 |
| #line | 315 |
| Attributes | 315 |
| Unsafe Code | 318 |
| Pointers | 319 |
| Using Pointers to Optimize Performance | 332 |
| Creating Stack-based Arrays | 332 |
| Summary | 336 |
| Chapter 7 | C# and the Base Classes | 339 |
| System.Object | 340 |
| Comparing Reference Objects for Equality | 341 |
| Comparing Value Types for Equality | 343 |
| String Handling | 343 |
| System.String | 344 |
| Building Strings | 345 |
| Regular Expressions | 354 |
| Introduction to Regular Expressions | 355 |
| Sample: RegularExpressionsPlayaround | 355 |
| Displaying Results | 357 |
| Matches, Groups, and Captures | 359 |
| Groups of Objects | 361 |
| Array Lists | 361 |
| Collections | 363 |
| Dictionaries | 367 |
| Custom Attributes | 376 |
| Writing Custom Attributes | 377 |
| The WhatsNewAttributes Sample | 381 |
| Reflection | 384 |
| The System.Type Class | 384 |
| Sample: TypeView | 387 |
| The Assembly Class | 389 |
| Completing the WhatsNewAttributes Sample | 390 |
| Threading | 394 |
| Applications with Multiple Threads | 395 |
| Manipulating Threads | 396 |
| The ThreadPlayaround Sample | 398 |
| Thread Priorities | 401 |
| Synchronization | 402 |
| Summary | 407 |
| Chapter 8 | Programming in the .NET Environment | 409 |
| Visual Studio.NET | 410 |
| Creating A Project | 412 |
| Exploring and Coding a Project | 423 |
| Building a Project | 434 |
| Debugging | 438 |
| Other .NET Tools | 441 |
| WinCV | 442 |
| .NET Usage Guidelines | 442 |
| Naming Conventions | 443 |
| Use of Properties and Methods | 446 |
| Use of Fields | 447 |
| Summary | 447 |
| Chapter 9 | Windows Applications | 449 |
| Architecture | 450 |
| Forms | 452 |
| Controls | 454 |
| Events and Delegates | 458 |
| Grouping Controls | 462 |
| Drawing Classes | 463 |
| Custom Controls | 466 |
| Menus | 476 |
| Dialog Boxes | 477 |
| Summary | 479 |
| Chapter 10 | Assemblies | 481 |
| What are Assemblies? | 481 |
| The Answer to DLL-Hell | 482 |
| Features of Assemblies | 483 |
| Application Domains and Assemblies | 484 |
| Assembly Structure | 486 |
| Assembly Manifests | 487 |
| Namespaces, Assemblies, and Components | 488 |
| Private and Shared Assemblies | 488 |
| Viewing Assemblies | 488 |
| Building Assemblies | 489 |
| Cross Language Support | 493 |
| Language Independence in Action | 494 |
| CLS Requirements | 502 |
| Adding Resources to Assemblies | 504 |
| Creating Resource Files | 504 |
| Using Resource Files | 506 |
| Internationalization and Resources | 509 |
| Resources for Localization | 514 |
| Localization Example using Visual Studio.NET | 514 |
| Global Assembly Cache | 523 |
| Native Image Generator | 524 |
| Global Assembly Cache Viewer | 524 |
| Create Shared Assemblies | 526 |
| Shared Assembly Names | 526 |
| Creating a Shared Assembly | 528 |
| Configuration | 532 |
| Versioning | 533 |
| Configuring Directories | 537 |
| Deployment | 540 |
| Deployment of DLLs | 540 |
| Creating a Merge Module | 540 |
| Summary | 541 |
| Chapter 11 | Data Access with .NET | 543 |
| ADO.NET Overview | 543 |
| Shared Classes | 543 |
| Database Specific Classes | 544 |
| Namespaces | 544 |
| Connections | 545 |
| Transactions | 545 |
| Commands | 547 |
| Executing Commands | 547 |
| Calling Stored Procedures | 550 |
| Data Readers | 553 |
| Data Sets | 556 |
| Data Tables | 557 |
| Data Relationships | 563 |
| Data Constraints | 565 |
| XML Schema | 567 |
| Populating a Data Set | 578 |
| Persisting Data Set Changes | 580 |
| Working with ADO.NET | 584 |
| Tiered Development | 584 |
| SQL Server Key Generation | 585 |
| Naming Conventions | 588 |
| Performance | 589 |
| Summary | 590 |
| Chapter 12 | Viewing .NET Data | 593 |
| The DataGrid Control | 593 |
| Displaying Tabular Data | 593 |
| Data Sources | 596 |
| DataGrid Class Hierarchy | 603 |
| Data Binding | 607 |
| Simple Binding | 607 |
| Data Binding Objects | 608 |
|
|
 |
| Related titles: |
|