C# Tutorial · C# Basics · Lesson 7 of 22
C# History & Versions
How Microsoft created C# and .NET, how they became open source and cross-platform, every C# version from 1.0 to 14 on one timeline, and which .NET version to use today.
How C# started
At the end of the 1990s Microsoft was building a new platform, .NET, for Windows and web applications. It needed a modern, object-oriented language that was safer than C++ and easier than it, with garbage collection and a rich class library. A team led by Anders Hejlsberg, the designer of Turbo Pascal and Delphi, created C# (pronounced "C sharp"). It was announced in July 2000 and shipped with the .NET Framework 1.0 and Visual Studio .NET in February 2002. C# is also an international standard (ECMA-334, ISO/IEC 23270).
C# code compiles to Intermediate Language (IL), which the .NET runtime compiles to machine code as the program runs. Several languages share that runtime, including F# and Visual Basic, and they can use each other's libraries.
For its first decade C# ran almost only on Windows. The open-source Mono project (2004) brought it to Linux and macOS, and Microsoft later bought Xamarin, the company behind Mono. Then Microsoft changed course: the Roslyn compiler became open source in 2014, and the cross-platform, open-source .NET Core arrived in 2016. Since .NET 5 (2020) there is a single ".NET" for Windows, Linux, macOS, mobile and the cloud.
Timeline of C# versions
Each C# version ships with a .NET release. The status shows the support of that .NET version.
- C# 14Current
- Ships with .NET 10 (LTS, supported until Nov 2028)
- Extension members (extension properties and static extensions), the
fieldkeyword in properties, null-conditional assignmentcustomer?.Order = order
- C# 13Supported until Nov 2026
- .NET 9 (STS):
paramscollections, the newLocktype, partial properties, the\eescape
- .NET 9 (STS):
- C# 12LTS until Nov 2026
- .NET 8 (LTS): primary constructors for classes, collection expressions
[1, 2, 3], default lambda parameters
- .NET 8 (LTS): primary constructors for classes, collection expressions
- C# 11End of life · May 2024
- .NET 7: raw string literals
"""...""",requiredmembers, list patterns, generic math
- .NET 7: raw string literals
- C# 10End of life · Nov 2024
- .NET 6 (LTS): global
using, file-scoped namespaces,record struct
- .NET 6 (LTS): global
- C# 9End of life · May 2022
- .NET 5, the first unified .NET: records,
init-only setters, top-level statements
- .NET 5, the first unified .NET: records,
- C# 8Historic
- .NET Core 3.0: nullable reference types, async streams, switch expressions, ranges
[1..^1]
- .NET Core 3.0: nullable reference types, async streams, switch expressions, ranges
- C# 7.0Historic
- Tuples
(int, string), pattern matching,out var, local functions
- Tuples
- C# 6.0Historic
- String interpolation
$"Hi {name}", the?.operator,nameof, expression-bodied members; first release on the open-source Roslyn compiler
- String interpolation
- C# 5.0Historic
async/await(C# made this pattern popular before most other languages adopted it)
- C# 4.0Historic
dynamic, named and optional arguments, generic variance
- C# 3.0Historic
- LINQ, lambda expressions,
var, extension methods, anonymous types
- LINQ, lambda expressions,
- C# 2.0Historic
- Generics, nullable value types
int?, iterators withyield, partial classes
- Generics, nullable value types
- C# 1.0Historic
- The first release, with .NET Framework 1.0 and Visual Studio .NET
How C# and .NET modernized
- Open source and cross-platform. Roslyn (2014), .NET Core (2016) and the unified .NET 5 (2020) turned a Windows-only stack into an open-source platform that runs everywhere and is developed on GitHub.
- A yearly rhythm. A new .NET and C# ship every November. Even-numbered .NET versions are LTS (three years of support); odd-numbered ones are STS (standard term, two years).
- Safer code. Nullable reference types (C# 8) let the compiler warn about possible
nullmistakes. - Less ceremony. Records, top-level statements, global usings, primary constructors and collection expressions cut a lot of boilerplate; a small program can now be a single line.
- Performance.
Span<T>, ahead-of-time compilation (Native AOT) and constant runtime work made modern .NET one of the fastest managed platforms.
.NET Framework vs modern .NET
| Topic | .NET Framework 4.8 | Modern .NET (8, 9, 10) |
|---|---|---|
| Platforms | Windows only | Windows, Linux, macOS, containers, mobile |
| Source | Closed (reference source only) | Open source on GitHub |
| New features | Maintenance only; ships with Windows | New version every November |
| Latest C# | C# 7.3 officially | C# 14 |
| Performance | Older runtime | Much faster runtime, Native AOT, SIMD |
| Use it for | Existing Windows apps (WinForms, WPF, ASP.NET) | All new development |
Which version should you use?
- New projects: .NET 10 with C# 14 (LTS until November 2028).
- Existing projects: .NET 8 and .NET 9 both reach end of support on 10 November 2026, so plan the upgrade to .NET 10 now. Keep .NET Framework only for Windows apps you can't move yet.
- This tutorial: examples are compiled and run with the .NET SDK when we build the lessons, and their real output is shown under each example. C# examples can't run in your browser.
Official resources
- C# documentation and the C# version history
- .NET support policy: LTS and STS dates
- C# language design on GitHub and the Roslyn compiler
- ECMA-334, the C# standard
- .NET release schedule on endoflife.date
Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.