Instructor-Led Developer Training

Advanced C#

5 days

This Hands-On Advanced C# Development course is designed to elevate experienced developers from effective users of C# to confident designers of robust, performant, and maintainable .NET applications. It’s for developers who are already productive in C# and are ready to transition from feature usage to intentional system design. This course focuses on judgment, trade-offs, and correctness at scale, preparing developers to work confidently in complex, long-lived codebases without yet requiring deep runtime or memory internals expertise.

What you will learn:

  • Designing reliable systems using modern C#
  • Making informed trade-offs around performance, concurrency, and architecture
  • Applying async, dependency injection, and patterns correctly at scale
  • Building systems that are testable, diagnosable, and maintainable in production
  • Participants leave with stronger design judgment, fewer production issues, & greater confidence working in large, long-lived codebases

Course Outline

Advanced Asynchronous Programming & Concurrency (Usage-Level)

  • async / await beyond syntax
  • Task-based asynchronous design
  • Async I/O vs CPU-bound work
  • Avoiding deadlocks and thread starvation
  • Responsible use of concurrency primitives

Dependency Injection as a Design Tool

  • DI as a design principle
  • Constructor injection
  • Service lifetimes (transient, scoped, singleton)
  • Common DI anti-patterns
  • Testing with DI

Performance Awareness & Profiling Discipline

  • Measuring before optimizing
  • Profiling tools and methodologies
  • Identifying hot paths
  • Allocation awareness at a conceptual level
  • Distinguishing symptoms from causes

Advanced Object-Oriented Design & Patterns

  • SOLID principles in practice
  • Composition over inheritance
  • Refactoring toward clarity
  • Practical use of common patterns:
    • Strategy
    • Factory
    • Decorator
    • Adapter

Error Handling, Resilience, and Diagnostics

  • Exception modeling and design
  • Fail-fast vs recoverable failures
  • Logging strategies
  • Diagnostics and observability
  • Designing for operational support

Architectural Awareness (Without Full Architecture)

  • Separation of concerns
  • Layered architectures
  • Boundary definition
  • Contract-driven design
  • Evaluating architectural trade-offs

Back to top