C# From Beginner to Advanced
A complete route through C#, from your first program to async code, LINQ and the language features professional codebases actually rely on.
About this course
C# is a large language, and most courses either stop at the basics or jump straight to advanced features without connecting them. This course runs the full distance and keeps the thread visible: each module exists because the previous one left a problem unsolved.
You start by writing single files that print text. By the end you are writing asynchronous code, querying collections with LINQ, and structuring types so the compiler prevents mistakes rather than reporting them at runtime.
The course carries one project throughout. You build an employee management console application early, using whatever you know at the time, then deliberately return and improve it as new language features make the earlier version look clumsy. Seeing your own code get better is more instructive than reading someone else's finished version.
Course roadmap
All 62 lessons are written and available.
Module 01
Getting Started
Set up a working environment and understand the relationship between the language, the platform and the tools.
- 01What Is C#?Describe what kind of language C# is and what that means for how you write it.10 min
- 02C# vs .NET: What Is the Difference?Explain the relationship between the language, the runtime, the SDK and the libraries.10 min
- 03Setting Up Your EnvironmentInstall the SDK, verify it works, and choose an editor.12 min
- 04Creating Your First ApplicationCreate, run and modify a console project, and understand what each file is for.14 min
- 05Understanding Project StructureRead a .csproj file and explain what the build output folders contain.11 min
- 06Understanding the Build ProcessExplain what restore, build, run and publish each do, and pick the right one.12 min
- 01Variables and DeclarationsDeclare variables with explicit types and with var, and know when each reads better.12 min
- 02Constants and Readonly ValuesChoose between const and readonly for values that must not change.13 min
- 03Numbers and BooleansPick the right numeric type and understand overflow and precision limits.16 min
- 04Working with StringsBuild, compare and format text, and avoid the cost of repeated concatenation.16 min
- 05Type ConversionConvert between types safely using casts, Convert and TryParse.15 min
- 06Operators in DepthApply arithmetic, comparison, logical and null-coalescing operators with correct precedence.14 min
- 07if, else and Conditional ExpressionsBranch clearly, including with the conditional operator where it aids readability.13 min
- 08switch Statements and ExpressionsReplace long condition chains with a switch, and use switch expressions for value selection.15 min
- 09Loops in C#Use for, foreach, while and do-while, and control flow with break and continue.15 min
- 01Creating MethodsDefine methods with clear names, inputs and return types.14 min
- 02ParametersPass data into methods, including by value, by reference and with out.16 min
- 03Return ValuesReturn single and multiple values, and decide when a return type should be nullable.15 min
- 04Optional and Named ArgumentsProvide defaults and call methods readably when several parameters share a type.13 min
- 05Method OverloadingOffer several versions of a method and understand how the compiler chooses.15 min
- 06Scope and LifetimePredict where a variable is visible and how long it exists.14 min
Module 04
Object-Oriented Programming
Model your problem with types that own their data and behaviour, and draw boundaries that hold up as the code grows.
- 01Classes and ObjectsDefine a class that keeps related data together, and explain how reference types differ from value types.16 min
- 02ConstructorsGuarantee an object is valid the moment it is created.16 min
- 03Fields and PropertiesChoose between a field and a property, and control access to each.16 min
- 04EncapsulationHide internal state so a type cannot be put into an invalid condition from outside.18 min
- 05InheritanceShare behaviour through a base class, and recognise when composition is the better option.20 min
- 06PolymorphismTreat different types through a shared contract using virtual and override.18 min
- 07Abstraction and Abstract ClassesDefine partial implementations that subclasses must complete.16 min
- 08InterfacesDefine a contract independent of implementation, and explain why this enables testing.20 min
Module 05
Collections
Hold many values at once, and pick the structure that matches how you need to access them.
- 01ArraysWork with fixed-size collections, including multi-dimensional ones.15 min
- 02ListUse a growable list and understand its cost characteristics.16 min
- 03DictionaryLook values up by key in constant time and handle missing keys correctly.16 min
- 04HashSet, Queue and StackPick the structure that matches your access pattern.16 min
- 05Introducing GenericsExplain what the type parameter in List<T> gives you.15 min
Module 06
Modern C#
Language features that remove noise from everyday code, and the null-safety model that prevents a common class of crash.
- 01Nullable Reference TypesUse the compiler's null analysis to prevent null reference exceptions.18 min
- 02RecordsDeclare immutable data types concisely and copy them with with expressions.18 min
- 03Pattern MatchingTest shape and extract values in one step.20 min
- 04TuplesReturn several related values without declaring a type for them.14 min
- 05Expression-Bodied MembersWrite single-expression members concisely without losing clarity.12 min
- 06Extension MethodsAdd methods to existing types, and know when this is inappropriate.16 min
- 07Delegates and EventsPass behaviour as a value and publish notifications to subscribers.20 min
- 08Lambda ExpressionsWrite inline functions and understand what they capture.16 min
Module 07
LINQ
Describe what data you want instead of writing loops to gather it, and understand when the query actually runs.
- 01Why LINQ ExistsReplace hand-written loops with a declarative description of the result you want.17 min
- 02Filtering with WhereSelect the items that satisfy a condition.18 min
- 03Projection with SelectTransform each item into a different shape.18 min
- 04SortingOrder results by one or several keys.15 min
- 05GroupingGather items by a key and summarise each group.18 min
- 06JoiningCombine two sequences on a matching key.17 min
- 07AggregationReduce a sequence to a single value with Count, Sum, Min, Max and Average.17 min
- 08Deferred Execution, IEnumerable and IQueryableExplain when a query actually runs, and why this matters enormously with a database.22 min
Module 08
Asynchronous Programming
Stop blocking a thread while waiting for work that is not yours, and handle the failure modes that come with it.
- 01Synchronous vs AsynchronousExplain what blocking costs and when asynchronous code helps.16 min
- 02Task and Task<T>Represent work in progress and retrieve its result.15 min
- 03async and awaitWrite asynchronous methods that read like ordinary sequential code.20 min
- 04CancellationLet long-running work be stopped cleanly with a cancellation token.17 min
- 05Exceptions in Async CodeHandle failures in asynchronous work, including several concurrent failures.18 min
- 06Running Work ConcurrentlyStart several operations together with Task.WhenAll and know when not to.18 min
Module 09
Advanced C#
The features you reach for less often but need to recognise, plus how your choices affect memory and speed.
- 01Generics in DepthWrite generic types and methods with constraints.18 min
- 02ReflectionInspect types at run time, and understand the cost of doing so.17 min
- 03AttributesAttach metadata to code and read it back.16 min
- 04Dependency Injection ConceptsExplain why a class should receive its dependencies rather than construct them.19 min
- 05Memory and AllocationDescribe stack and heap allocation and what garbage collection does for you.17 min
- 06Performance ConsiderationsMeasure before optimising, and recognise the allocations that matter.18 min
On completion
What you should take away
- C# is statically typed, and that is a tool for catching mistakes early rather than a formality
- Object-oriented design is about drawing useful boundaries, not about using every keyword available
- Collections and LINQ replace most hand-written loops with clearer intent
- Asynchronous code is about not wasting time waiting, and it needs its own error handling discipline
- Modern language features are worth adopting when they remove noise, not because they are new
Recommended next course
.NET Fundamentals
Understand the platform your C# runs on: the runtime, the SDK, the CLI, packages, configuration, logging and dependency injection.
Continue to .NETHave a project worth talking through?
Tell us what you're building or what's slowing your current system down. We'll give you a direct read on scope and approach.