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
