This live, instructor-led training course is intended for programmers with prior programming experience who wish to develop proficiency in the C# language. Participants will learn how C# functions and its position within the broader programming language landscape, its integration with the Common Language Infrastructure and .NET Framework, C# data types and operators, writing selection statements and iteration loops, generic programming techniques, working with collections, data processing strategies, and error handling approaches. This course uses C# 8 as the baseline version for all demonstrations and practical exercises.
Audience:
Programmers new to the C# language who possess established experience with other programming languages.
Prerequisites:
This course is specifically designed for individuals with prior programming experience. You should have working familiarity with Object Oriented Programming concepts. If you have no prior programming background or lack familiarity with Object Oriented Programming, consider our alternative course, "C# Programming Level 1: Introduction for Non-Programmers" instead.
Course Outline:
Starting with the Building Blocks of C#
- The history of C#
- Understanding the CLI
- Common Type System (CTS)
- Common Language Specification (CLS)
- Common Intermediate Language (CIL)
- Virtual Execution System (VES)
- The .NET family of frameworks
- .NET Framework
- .NET Core
- Xamarin
- Assemblies in .NET
- Global Assembly Cache (GAC)
- Runtime package store
- Understanding the basic structure of a C# program
Data Types and Operators
- Basic data types
- The integral types
- The floating-point types
- The decimal type
- The char type
- The bool type
- The string type
- The object type
- Variables
- Naming conventions
- Implicitly-typed variables
- Understanding the scope and lifetime of variables
- Understanding constants
- Reference types and value types
- Value types
- Reference types
- Boxing and unboxing
- Nullable types
- Arrays
- One-dimensional arrays
- Multi-dimensional arrays
- Jagged arrays
- Type conversion
- Implicit type conversion
- Explicit type conversion
- User-defined type conversions
- Conversions with helper classes
- Operators
- Arithmetic operators
- Relational operators
- Logical operators
- Bitwise and shift operators
- Assignment operators
- Other operators
Control Statements and Exceptions
- Understanding control statements
- Selection statements
- Iteration statements
- The jump statements
- Exception handling
- Summary
- Test what you learned
Understanding the Various User-Defined Types
- Classes and objects
- Fields
- Methods
- Constructors
- Properties
- Indexers
- The this keyword
- The static keyword
- The ref, in, and out parameters
- Methods with a variable number of arguments
- Named and optional arguments
- Access modifiers
- Partial classes
- Structures
- Enumerations
- Namespaces
Object-Oriented Programming in C#
- Understanding OOP
- Abstraction
- Encapsulation
- Inheritance
- Virtual members
- Abstract classes and members
- Sealed classes and members
- Hiding base class members
- Interfaces
- Polymorphism
- Method overloading
- Operator overloading
- SOLID principles
Generics
- Understanding generics
- Generic types
- Generic classes
- Inheritance with generic classes
- Generic interfaces
- Variant generic interfaces
- Generic structures
- Generic methods
- Type parameter constraints
Collections
- Introducing the System.Collections.Generic namespace
- The ListT collection
- The StackT collection
- The QueueT collection
- The LinkedListT collection
- The DictionaryTKey, TValue collection
- The HashSetT collection
- Choosing the right collection type
- Using thread-safe collections
- IProducerConsumerCollectionT
- BlockingCollectionT
- ConcurrentQueueT
- ConcurrentStackT
- ConcurrentBagT
- ConcurrentDictionaryTKey, TValue
- Choosing the right concurrent collection type
Files, Streams, and Serialization
- Overview of the System.IO namespace
- Working with paths
- Working with files and directories
- Working with streams
- Overview of the stream classes
- Working with file streams
- Working with memory streams
- Serializing and deserializing XML
- Serializing and deserializing JSON
- Using Json.NET
- Using System.Text.Json
Error Handling
- Errors
- Exceptions
- Catching exceptions
- The exception objects
- Conditional catch
- Throwing exceptions
- Creating a custom exception type
- Rethrowing an exception
- The finally block
- Debugging and monitoring exceptions
- Debugging second-chance exceptions
- Debugging first-chance exceptions
- AppDomain exception events
- Logging exceptions