| Acknowledgments | p. xi |
| Introduction | p. xiii |
| Introduction to C# | p. 1 |
| The Component-based Model of Software Design | p. 2 |
| The .NET Approach to Component-based Software Development | p. 5 |
| What Is the .NET Framework | p. 6 |
| .NET's Common Language Runtime | p. 6 |
| .NET's Framework Class Libraries | p. 9 |
| .NET Framework Tools and Utilities | p. 10 |
| Why C# | p. 11 |
| What Is C# | p. 13 |
| C# Language Review | p. 15 |
| A Simple C# Program | p. 16 |
| A Few More Comments on Main() | p. 17 |
| Adding a Class to the Simple C# Program | p. 17 |
| C# Types and Type Management | p. 18 |
| Value Types | p. 19 |
| Struct Type | p. 20 |
| Enumerations | p. 22 |
| Reference Types | p. 23 |
| Type Comparisons | p. 25 |
| Boxing and Unboxing | p. 25 |
| Type Conversions | p. 26 |
| Arrays | p. 27 |
| Object-oriented Component Development in C# | p. 28 |
| Object-oriented Features of C# | p. 29 |
| Class Constructors and Destructors | p. 40 |
| Methods | p. 42 |
| Fields | p. 46 |
| Properties | p. 46 |
| Operator Overloading | p. 48 |
| Delegates | p. 50 |
| Events | p. 53 |
| Namespaces in C# | p. 57 |
| Declaring Namespaces | p. 58 |
| Exceptions | p. 59 |
| Attributes | p. 61 |
| Indexers | p. 62 |
| Writing Unsafe Code | p. 65 |
| Documenting Code Using XML | p. 66 |
| C# Coding Style | p. 68 |
| .NET, the Operating Environment for C# | p. 69 |
| Microsoft IL | p. 70 |
| How the CLR Gets Loaded | p. 72 |
| .NET Building Blocks | p. 76 |
| Modules | p. 76 |
| Assemblies | p. 76 |
| Application Domains | p. 77 |
| Building Modules and Assemblies | p. 78 |
| Robust Version Control | p. 79 |
| Built-in Metadata | p. 84 |
| Attribute-based Programming | p. 86 |
| Reflection | p. 88 |
| Cross-language Interoperability | p. 93 |
| Common Language Specification | p. 94 |
| Common Type System | p. 95 |
| Object-oriented | p. 96 |
| Delegation and Events | p. 98 |
| Memory Management Through Garbage Collection | p. 98 |
| Garbage Collection Step-by-Step | p. 100 |
| Finalization | p. 102 |
| Strong and Weak References | p. 105 |
| Thread Synchronization | p. 107 |
| C# Language Comparisons | p. 109 |
| Comparing C# to C++ | p. 110 |
| Comparing C# to Visual Basic.NET | p. 127 |
| Comparing C# to Java | p. 132 |
| Working Within the Bounds of C# | p. 143 |
| Deterministic Finalization | p. 144 |
| Releasing Resources Explicitly | p. 146 |
| Variable Declaration with the using Keyword | p. 147 |
| Reference Counting | p. 150 |
| .NET Finalization | p. 153 |
| Multiple Inheritance | p. 154 |
| ATLs Multiple Inheritance In-depth | p. 155 |
| Containment | p. 156 |
| Interface Implementation | p. 160 |
| Macros | p. 162 |
| Combining Macros with Interface Inheritance | p. 162 |
| Templates | p. 164 |
| Source Code Security | p. 166 |
| Integrating Legacy Code with C# | p. 167 |
| Integration Approaches | p. 168 |
| Calling COM Objects from C# | p. 169 |
| Using the TLBIMP Utility | p. 171 |
| The Runtime Callable Wrapper | p. 172 |
| Method Return Values and HRESULTs | p. 173 |
| COM Object Lifetime and Deterministic Finalization | p. 174 |
| Inheritance and RCW Objects | p. 174 |
| COM Connection Points | p. 174 |
| Threading of the RCW Components | p. 176 |
| The COM Callable Wrapper, Calling .NET Objects from COM | p. 177 |
| TLBEXP Utility | p. 178 |
| REGASM | p. 184 |
| COM Callable Wrapper | p. 185 |
| Providing .NET Events to COM Clients | p. 187 |
| Threading of .NET Components | p. 193 |
| Additional COM Interoperability Attributes | p. 193 |
| Additional .NET to Type Library Conversions | p. 194 |
| Data Marshalling | p. 196 |
| Strings and the MarshalAsAttribute | p. 196 |
| Marshalling Objects | p. 197 |
| Platform Invocation Services, Calling Unmanaged APIs from C# | p. 199 |
| Interoperability Through Managed C++ | p. 201 |
| Migrating Code | p. 210 |
| Summary | p. 211 |
| Index | p. 213 |
| Table of Contents provided by Syndetics. All Rights Reserved. |