Sdílet prostřednictvím


Historie jazyka C#

Tento článek obsahuje historii každé hlavní verze jazyka C#. Tým C# pokračuje v inovování a přidávání nových funkcí. Podrobný stav jazykových funkcí, včetně funkcí zvažovaných pro nadcházející vydání, najdete v úložišti dotnet/roslyn na GitHubu. Pokud chcete zjistit, kdy byla do jazyka přidána určitá funkce, projděte si soubor historie verzí jazyka C# v úložišti dotnet/csharplang na GitHubu.

Důležité

Jazyk C# spoléhá na typy a metody v tom, co specifikace jazyka C# definuje jako standardní knihovnu pro některé funkce. Platforma .NET poskytuje tyto typy a metody v řadě balíčků. Jedním z příkladů je zpracování výjimek. Každý throw příkaz nebo výraz je kontrolován, aby se zajistilo, že objekt, který je vyvolán, je odvozen z Exception. Podobně, každý catch je kontrolován, aby zajistil, že zachytávaný typ je odvozen od Exception. Každá verze může přidat nové požadavky. Pokud chcete používat nejnovější jazykové funkce ve starších prostředích, možná budete muset nainstalovat konkrétní knihovny. Tyto závislosti jsou popsané na stránce pro každou konkrétní verzi. Další informace o vztazích mezi jazykem a knihovnou k pochopení této závislosti.

C# verze 14

Vydáno v listopadu 2025

C# 14 obsahuje následující nové funkce:

C# verze 13

vydáno v listopadu 2024

C# 13 obsahuje následující nové funkce:

  • params kolekce: modifikátor params není omezen na typy polí. Nyní můžete použít params s libovolným rozpoznaným typem kolekce, včetně Span<T>a typů rozhraní.
  • Nový lock typ a sémantika: Pokud cíl příkazu lock je System.Threading.Lock, kompilátor generuje kód, který použije metodu Lock.EnterScope() k zadání výhradního oboru. ref struct, které podporuje vzor Dispose(), umožňuje ukončení výhradního oboru.
  • Nová escape sekvence – \e: Můžete použít \e jako escape sekvenci literálu pro znak ESCAPE, Unicode U+001B.
  • Malé optimalizace řešení přetížení, které zahrnují skupiny metod.
  • Implicitní přístup indexeru v inicializátorech objektů: Implicitní operátor indexu "od konce", ^, je nyní povolen v rámci výrazu inicializátoru objektu.
  • V iterátorech a asynchronních metodách můžete použít místní hodnoty ref a kontexty unsafe.
  • K implementaci rozhraní můžete použít typy ref struct.
  • ref struct typy můžete povolit jako argumenty pro parametry typu v obecných typech.
  • Částečné vlastnosti a indexery jsou teď povolené v partial typech.
  • Priorita rozlišení přetížení umožňuje autorům knihoven určit jedno přetížení jako lepší než ostatní.

C# verze 12

Vydáno v listopadu 2023

V jazyce C# 12 byly přidány následující funkce:

Interceptors – byly vydány jako funkce typu náhled.

C# 12 celkově nabízí nové funkce, které usnadňují psaní kódu jazyka C#. Syntaxe, kterou jste už věděli, je k dispozici na více místech. Jiná syntaxe umožňuje konzistenci souvisejících konceptů.

C# verze 11

Vydáno v listopadu 2022

V jazyce C# 11 byly přidány následující funkce:

C# 11 představuje obecnou matematiku a několik funkcí, které tento cíl podporují. Číselné algoritmy můžete psát jednou pro všechny typy čísel. Existuje více funkcí, které usnadňují práci s struct typy, jako jsou povinné členy a automatické výchozí struktury. Práce s řetězci je jednodušší s řetězcovými literály raw, newline v interpolacích řetězců a řetězcovými literály UTF-8. Funkce, jako jsou místní typy souborů, umožňují jednodušší generátory zdrojů. A konečně, seznam vzorů přidává další podporu pro porovnávání vzorů.

C# verze 10

Vydáno v listopadu 2021

Jazyk C# 10 přidá do jazyka C# následující funkce a vylepšení:

C# 10 pokračuje v práci na motivech odebrání obřadu, oddělení dat od algoritmů a lepšího výkonu pro modul runtime .NET.

Mnoho funkcí znamená, že zadáte méně kódu, abyste vyjádřili stejné koncepty. Struktury záznamů syntetizují mnoho stejných metod, které třídy záznamů dělají. Struktury a anonymní typy podporují výrazy. Globální direktivy použití a deklarace oboru názvů s rozsahem souboru znamenají, že závislosti a organizace oboru názvů jsou vyjádřeny jasněji. Vylepšení lambda usnadňují deklaraci výrazů lambda tam, kde se používají. Nové vzory vlastností a vylepšení dekonstrukce vytvářejí stručnější kód.

Nové Interpolované obslužné programy řetězců a AsyncMethodBuilder chování mohou zlepšit výkon. Tyto jazykové funkce byly použity v modulu runtime .NET k dosažení vylepšení výkonu v .NET 6.

C# 10 označuje také větší posun k ročnímu tempu vydávání verzí .NET. Vzhledem k tomu, že ne každou funkci je možné dokončit v ročním časovém rámci, můžete vyzkoušet několik funkcí ve verzi Preview v jazyce C# 10. Můžete použít obecné atributy i statické abstraktní členy v rozhraních, ale tyto funkce ve verzi Preview se můžou před finální verzí změnit.

C# verze 9

Vydáno v listopadu 2020

Jazyk C# 9 byl vydán s .NET 5. Jedná se o výchozí jazykovou verzi pro všechna sestavení, která cílí na verzi .NET 5. Obsahuje následující nové a vylepšené funkce:

C# 9 pokračuje ve třech motivech z předchozích verzí: odebrání obřadu, oddělení dat od algoritmů a poskytování dalších vzorů na více místech.

Příkazy nejvyšší úrovně znamenají, že váš hlavní program je jednodušší na čtení. Není potřeba tolik ceremonie: obor názvů, Program třída a static void Main() jsou všechno zbytečné.

records Úvod poskytuje stručnou syntaxi pro odkazové typy, které sledují sémantiku hodnot pro rovnost. Pomocí těchto typů můžete definovat datové kontejnery, které obvykle definují minimální chování. Init-only setters umožňují nedestruktivní mutace (with výrazy) v záznamech. C# 9 také přidává kovariantní návratové typy , aby odvozené záznamy mohly přepsat virtuální metody a vrátit typ odvozený z návratového typu základní metody.

Možnosti porovnávání vzorů se rozšířily několika způsoby. Číselné typy teď podporují vzory rozsahů. Vzory lze kombinovat pomocí andor, a not vzorů. Závorky lze přidat k objasnění složitějších vzorů:

C# 9 obsahuje nová vylepšení porovnávání vzorů:

  • Vzory typů odpovídají určitému typu objektu.
  • Vzory uzavřené v závorkách vynucují nebo zdůrazňují precedenci kombinací vzorů
  • Vzory konjunktivu and vyžadují, aby se oba vzory shodovaly.
  • Disjunktivní or vzory vyžadují, aby se shodoval alespoň jeden vzor.
  • Negované not vzory vyžadují, aby se vzor neshodoval.
  • Relační vzory vyžadují, aby vstup byl menší než, větší než, menší nebo roven nebo větší než nebo rovno dané konstantě.

Tyto vzory obohacují syntaxi vzorů. Jedním z nejběžnějších použití je nová syntaxe kontroly null:

if (e is not null)
{
    // ...
}

Libovolný z těchto vzorů se dá použít v libovolném kontextu, kde jsou povolené vzory: is vzorové výrazy, switch výrazy, vnořené vzory a vzor switch popisku příkazu case .

Další sada funkcí podporuje vysokovýkonné výpočetní prostředí v jazyce C#:

  • Typy nint a nuint modelují celočíselné typy nativní velikosti na cílové CPU.
  • Ukazatele funkcí poskytují funkce podobné delegátům a zároveň se vyhýbají přidělením potřebným k vytvoření objektu delegáta.
  • Instrukce localsinit se dá vynechat, aby se uložily pokyny.

Výkon a interoperabilita

Další sada vylepšení podporuje scénáře, ve kterých generátory kódu přidávají funkce:

  • Inicializátory modulů jsou metody, které modul runtime volá při načtení sestavení.
  • Částečné metody podporují nové modifikátory přístupu a návratové typy bez void. V těchto případech musí být poskytována implementace.

Kvalita zpracování a dokončovací prvky

C# 9 přidává mnoho dalších malých funkcí, které zlepšují produktivitu vývojářů, jak psaní, tak čtení kódu:

  • Výrazy cílového typu new
  • static anonymní funkce
  • Podmíněné výrazy cílového typu
  • Podpora rozšíření GetEnumerator() pro foreach cykly
  • Výrazy lambda mohou deklarovat parametry zahození.
  • Atributy lze použít pro místní funkce.

Verze C# 9 pokračuje v práci na zachování moderního programovacího jazyka pro obecné účely v jazyce C#. Funkce nadále podporují moderní úlohy a typy aplikací.

C# verze 8.0

Vydáno v září 2019

C# 8.0 je první hlavní verze jazyka C#, která konkrétně cílí na .NET Core. Některé funkce spoléhají na nové funkce CLR (Common Language Runtime), jiné na typy knihoven přidané pouze v .NET Core. Jazyk C# 8.0 přidá do jazyka C# následující funkce a vylepšení:

Výchozí členové rozhraní vyžadují vylepšení v CLR. Tyto funkce byly přidány do CLR pro .NET Core 3.0. Rozsahy, indexy a asynchronní streamy vyžadují nové typy v knihovnách .NET Core 3.0. Odkazové typy s možnou hodnotou null jsou mnohem užitečnější, když jsou knihovny opatřeny poznámkami, které poskytují sémantické informace o možnosti null u argumentů a návratových hodnot, i když jsou implementovány v kompilátoru. Tyto poznámky se přidávají do knihoven .NET Core.

C# verze 7.3

Vydáno v květnu 2018

Verze C# 7.3 má dva hlavní motivy. Jeden motiv poskytuje funkce, které umožňují, aby byl bezpečný kód tak výkonný jako nebezpečný kód. Druhý motiv poskytuje přírůstková vylepšení stávajících funkcí. V této verzi byly přidány také nové možnosti kompilátoru.

Následující nové funkce podporují motiv lepšího výkonu pro bezpečný kód:

  • K pevným polím můžete přistupovat bez připnutí.
  • Můžete změnit přiřazení ref místních proměnných.
  • Inicializátory můžete použít u stackalloc polí.
  • Můžete použít fixed příkazy s libovolným typem, který podporuje vzor.
  • Můžete použít obecnější omezení.

U stávajících funkcí jsme provedli následující vylepšení:

  • Můžete testovat == a != s typy tuply.
  • Výrazové proměnné můžete použít na více místech.
  • K záložnímu poli automaticky implementovaných vlastností můžete připojit atributy.
  • Vyhodnocení metody bylo zlepšeno, když se argumenty liší o in.
  • Řešení přetížení má nyní méně nejednoznačných případů.

Nové možnosti kompilátoru jsou:

  • -publicsign umožnění podepisování sestavení pomocí open source softwaru (OSS).
  • -pathmap a poskytuje mapování zdrojových adresářů.

C# verze 7.2

Vydáno v listopadu 2017

Jazyk C# 7.2 přidal několik malých jazykových funkcí:

  • Inicializátory v stackalloc polích
  • Použijte příkazy fixed s libovolným typem, který podporuje vzor.
  • Přístup k fixním polím bez připnutí
  • Znovu přiřaďte ref místní proměnné.
  • Deklarujte readonly struct typy, které označují, že struktura je neměnná a měla by být předána jako in parametr jeho členské metody.
  • in Přidejte modifikátor parametrů, který určuje, že argument je předán odkazem, ale není upraven zavolánou metodou.
  • Pomocí modifikátoru ref readonly na návratové hodnotě metody indikujte, že metoda vrací svou hodnotu jako odkaz, ale neumožňuje modifikovat tento objekt.
  • Deklarujte ref struct typy, které označují, že typ struktury přistupuje přímo ke spravované paměti a musí být vždy přidělen zásobník.
  • Použijte obecnější omezení.
  • Neosledované pojmenované argumenty:
    • Poziční argumenty mohou následovat za pojmenovanými argumenty.
  • Úvodní podtržítka v číselných literálech:
    • Číselné literály teď můžou mít úvodní podtržítka před vytištěnými číslicemi.
  • private protected modifikátor přístupu:
    • private protected Modifikátor přístupu umožňuje přístup pro odvozené třídy ve stejném sestavení.
  • Podmíněné ref výrazy:
    • Výsledkem podmíněného výrazu (?:) teď může být odkaz.

C# verze 7.1

Vydáno v srpnu 2017

Jazyk C# začal vydávat verze bodů v jazyce C# 7.1. Tato verze přidala element konfigurace výběru jazykové verze, tři nové jazykové funkce a nové chování kompilátoru.

Nové jazykové funkce v této verzi jsou:

  • async Main metoda
    • Vstupní bod aplikace může mít async modifikátor.
  • default literální výrazy
    • Výchozí literální výrazy můžete použít ve výrazech výchozích hodnot, pokud lze odvodit cílový typ.
  • Odvozené názvy prvků n-tice
    • Názvy elementů řazené kolekce členů lze v mnoha případech odvodit z inicializace řazené kolekce členů.
  • Porovnávání vzorů u parametrů obecného typu
    • Výrazy shody vzorů můžete použít u proměnných, jejichž typ je parametr obecného typu.

A konečně, kompilátor má dvě možnosti -refout a -refonly, které řídí generování referenčních sestavení.

C# verze 7.0

Vydáno v březnu 2017

V sadě Visual Studio 2017 byla vydána verze C# 7.0. Tato verze má nějaké vývojové a zajímavé věci ve stylu C# 6.0. Tady jsou některé nové funkce:

Mezi další funkce patří:

Všechny tyto funkce nabízejí vývojářům nové možnosti a možnost psát čistější kód než kdy dřív. Zvýrazněním je zhuštění deklarace proměnných pomocí klíčového slova out a umožnění více návratových hodnot prostřednictvím n-tice. .NET Core teď cílí na jakýkoli operační systém a má oči pevně na cloud a na přenositelnost. Tyto nové funkce jistě zabírají myšlenky a čas návrhářů jazyka, kromě toho, že přichází s novými funkcemi.

C# verze 6.0

Vydáno v červenci 2015

Verze 6.0, vydaná s Visual Studio 2015, přinesla mnoho menších funkcí, které učinily programování v jazyce C# produktivnějším. Tady jsou některé z nich:

Mezi další nové funkce patří:

  • Inicializátory indexu
  • Čekat v blocích zachycení/finally
  • Výchozí hodnoty pro vlastnosti jen pro getter

Pokud se na tyto funkce podíváte společně, uvidíte zajímavý vzor. V této verzi začal jazyk C# eliminovat jazykové šablony, aby byl kód více stručný a čitelný. Takže pro fanoušky čistého, jednoduchého kódu, tato jazyková verze byla obrovská výhra.

Udělali jednu další věc spolu s touto verzí, i když to není tradiční jazyková funkce sama o sobě. Vydali Roslyn kompilátor jako službu. Kompilátor jazyka C# je teď napsaný v jazyce C# a kompilátor můžete použít jako součást svého programovacího úsilí.

C# verze 5.0

Vydáno v srpnu 2012

C# verze 5.0 vydaná v sadě Visual Studio 2012 byla zaměřená verze jazyka. Téměř veškeré úsilí pro tuto verzi bylo vloženo do jiného převratného jazykového konceptu: modelu async a await pro asynchronní programování. Tady je hlavní seznam funkcí:

Atribut Caller Info umožňuje snadno načíst informace o kontextu, ve kterém běží váš program, aniž byste se museli uchylovat k množství standardního reflexního kódu. Má mnoho použití v diagnostice a protokolování úloh.

Ale async a await jsou to skutečné hvězdy této verze. Když tyto funkce vyšly v roce 2012, jazyk C# znovu výrazně ovlivnil vývoj tím, že začlenil asynchronní programování jako plnohodnotnou součást jazyka.

C# verze 4.0

Vydáno v dubnu 2010

Jazyk C# verze 4.0 vydaný v sadě Visual Studio 2010 představil některé zajímavé nové funkce:

Vložené typy spolupráce zmírnily bolest při nasazení při vytváření sestavení pro interoperabilitu s modelem COM pro vaši aplikaci. Obecné typy s kovariancí a kontravariancí vám umožňují lépe využívat generika, ale jsou trochu akademické a pravděpodobně to nejvíce ocení autoři frameworků a knihoven. Pojmenované a volitelné parametry umožňují eliminovat mnoho přetížení metod a poskytovat pohodlí. Ale žádná z těchto funkcí není skutečně revoluční.

Hlavní funkcí bylo zavedení klíčového dynamic slova. Klíčové dynamic slovo představené ve verzi 4.0 jazyka C# přináší možnost obejít kontroly typů při kompilaci. Pomocí dynamického klíčového slova můžete vytvořit konstrukce podobné dynamicky zadaným jazykům, jako je JavaScript. Můžete vytvořit dynamic x = "a string" a potom k němu přidat šest, přičemž necháte na runtime, aby se vyřešilo, co se má stát dál.

Dynamická vazba poskytuje potenciál chyb, ale také skvělý výkon v rámci jazyka.

C# verze 3.0

Vydáno v listopadu 2007

C# verze 3.0 přišla na konci roku 2007 spolu se sadou Visual Studio 2008, i když celá loď jazykových funkcí by ve skutečnosti přišla s rozhraním .NET Framework verze 3.5. Tato verze označila zásadní změnu růstu jazyka C#. Zavedl jazyk C# jako skutečně impozantní programovací jazyk. Podívejme se na některé hlavní funkce v této verzi:

Při pohledu zpět se mnohé z těchto funkcí jeví jako nevyhnutelné i neoddělitelné. Všechny části do sebe zapadají strategicky. Tato funkce vraha verze jazyka C# byla výraz dotazu, označovaný také jako LINQ (Language-Integrated Query).

Podrobnější zobrazení zkoumá stromy výrazů, výrazy lambda a anonymní typy jako základ, na kterém je linQ vytvořen. V obou případech ale jazyk C# 3.0 představil revoluční koncept. Jazyk C# 3.0 začal klást základy pro přeměnu jazyka C# do hybridního jazyka objektově orientovaného / funkčního jazyka.

Konkrétně byste teď mohli psát deklarativní dotazy ve stylu SQL, které provádějí operace s kolekcemi, mimo jiné. Místo psaní for smyčky pro výpočet průměru seznamu celých čísel to teď můžete udělat jednoduše jako list.Average(). Kombinace výrazů dotazu a rozšiřujících metod tvoří seznam celých čísel mnohem chytřejší.

C# verze 2.0

Vydáno v listopadu 2005

Podívejme se na některé hlavní funkce jazyka C# 2.0 vydané v roce 2005 spolu se sadou Visual Studio 2005:

Další funkce jazyka C# 2.0 byly přidány do stávajících funkcí:

  • Getter/setter různá přístupová práva
  • Převody skupin metod (delegáti)
  • Statické třídy
  • Odvozování delegáta

Zatímco jazyk C# začal jako obecný jazyk OO (Object-Oriented), jazyk C# verze 2.0 se změnil ve spěchu. U obecných typů můžou typy a metody pracovat s libovolným typem a přitom zachovat bezpečnost typů. Například, když máte List<T>, můžete mít List<string> nebo List<int> a provádět operace bezpečné pro typ u těchto řetězců nebo celých čísel během iterace. Používání obecných typů je lepší než vytváření typu ListInt, který je odvozen od ArrayList, nebo přetypování z Object pro každou operaci.

Jazyk C# verze 2.0 přinesl iterátory. Stručně řečeno, iterátory vám umožní prozkoumat všechny položky v List (nebo jiných výčtových typech) pomocí smyčky foreach. Iterátory jako základní součást jazyka výrazně zlepšily čitelnost jazyka a schopnost lidí uvažovat o kódu.

C# verze 1.2

Vydáno v dubnu 2003

C# verze 1.2 byla dodávána se sadou Visual Studio .NET 2003. Obsahoval několik malých vylepšení jazyka. Nejdůležitější je, že počínaje touto verzí je kód vygenerovaný ve smyčce volaný při implementaci foreachDispose .IEnumeratorIEnumeratorIDisposable

C# verze 1.0

Vydáno v lednu 2002

Když se vrátíte a podíváte se, C# verze 1.0, vydaná se sadou Visual Studio .NET 2002, vypadala hodně jako Java. V rámci svých uvedených cílů návrhu pro ECMA se snažil být "jednoduchým, moderním, objektově orientovaným jazykem pro obecné účely". V době, kdy vypadala jako Java, znamenala, že dosáhla těchto počátečních cílů návrhu.

Ale když se podíváte zpátky na C# 1.0, zjistíte, že vám z toho trochu jde hlava kolem. Chyběly integrované asynchronní schopnosti a některé ze skvělých funkcí okolo obecných typů, které považujete za samozřejmost. Ve skutečnosti chybí generika zcela. A LINQ? Zatím není k dispozici. Tyto dodatky budou trvat několik let, než se projeví.

Verze 1.0 C# působila ve srovnání s dneškem osekaná o funkce. Našli byste, že píšete nějaký podrobný kód. Ale přesto musíte začít někde. Jazyk C# verze 1.0 byl realizovatelnou alternativou k Javě na platformě Windows.

Mezi hlavní funkce jazyka C# 1.0 patří:

Článekbyl původně publikován na NDepend blogu, díky Erikovi Dietrichovi a Patrickovi Smacchiovi.