Introduction to the C# Language: Evolution of C#; versions of C#, Expressing C# models in UML; C# and the .NET infrastructure: Common Language Infrastructure (CLI); Managed code philosophy; Intermediate Language (IL) and metadata. Language Fundamentals: Data types and control constructs; Declaring implicit and explicit variables; Value and reference types; Unicode characters and strings. Methods: Main method specification; Passing arguments; returning values; variable scope; Static vs. instance methods; Exceptions; Recovering resources. Employing .NET library classes: Namespaces; I/O; Console class; stream classes; Standard and Generic Collections. Defining classes: Encapsulating attributes; Properties; get, set; Initialization; Overloading methods and constructors; Inheritance; polymorphism. Objects: new; Passing initial values to constructors; Choosing value or reference allocation; Boxing and unboxing; Invoking methods and accessing properties. Interconnecting Objects: Associating classes; Manipulating references, Physical vs. logical equivalence, Selecting collection library classes, Increasing reliability using generics; Exposing interfaces; interface specification, Implementing an interface, Interface polymorphism, Indexers, events and delegates, Overloading operators. Simplifying Component Development: Component features of .NET; Manifests and assemblies, Deploying private and shared components, Introspecting at runtime using reflection, .NET assembly meta-model; Writing .NET components in C#; Creating and calling custom components, Extending System Component Model Component, Producing .NET components; Interfacing to ActiveX components; Accessing COM/DCOM, Forward and backward compatibility, Wrapping legacy components; Integrating VB, C++ and C#; Harmonizing components through the CLI, Accessing metadata, Handling cross-language exceptions