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 funkce jazyka, včetně funkcí považovaných za nadcházející vydané verze, najdete v úložišti dotnet/roslyn 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ě se kontroluje každý catch typ, který zajistí, že typ zachycený 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 pro pozadí této závislosti.

C# verze 12

Vydáno v listopadu 2023

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

A interceptors - byl vydán jako funkce Preview.

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í:

V režimu preview byly k dispozici další funkce. Abyste mohli tyto funkce používat, musíte v Preview projektu nastavit <LangVersion> tyto funkce:

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í použití direktiv a deklarací oboru názvů s oborem souborů znamenají, že jasněji vyjadřujete závislosti a organizaci oboru názvů. 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é rutiny ř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 hlavní program je jednodušší číst. Je méně potřeba pro ceremonii: obor názvů, Program třída a static void Main() všechny jsou 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 poskytují schopnost pro nedestruktivní mutační (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.
  • Závorky vynucují nebo zvýrazňují prioritu kombinací vzorů
  • Vzory konjunktivu and vyžadují, aby se oba vzory shodovaly.
  • Rozdílové or vzory vyžadují, aby se shodovaly s oběma vzory .
  • 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ů. Podívejte se na tyto příklady:

public static bool IsLetter(this char c) =>
    c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

S volitelnými závorky, aby bylo jasné, že and má vyšší prioritu než or:

public static bool IsLetterOrSeparator(this char c) =>
    c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

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#:

  • nuint Typy nint modelují celočíselné typy nativní velikosti na cílovém procesoru.
  • 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.

Přizpůsobení a dokončení funkcí

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 smyčky
  • 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 a indexy a asynchronní streamy vyžadují nové typy v knihovnách .NET Core 3.0. Odkazové typy s možnou hodnotou null, zatímco implementované v kompilátoru, je mnohem užitečnější, když jsou knihovny opatřeny poznámkami, které poskytují sémantické informace týkající se stavu null argumentů a návratových hodnot. 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í.
  • Příkazy můžete použít fixed 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 řazené kolekce členů.
  • Proměnné výrazů můžete použít ve více umístěních.
  • K záložnímu poli automaticky implementovaných vlastností můžete připojit atributy.
  • Řešení metody, když se argumenty liší podle toho, jak in byly vylepšeny.
  • Řešení přetížení má nyní méně nejednoznačných případů.

Nové možnosti kompilátoru jsou:

  • -publicsign povolení 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
  • Příkazy použijte fixed s libovolným typem, který podporuje vzor.
  • Přístup k pevný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 metody vrátí, chcete-li indikovat, že metoda vrací jeho hodnotu odkazem, ale neumožňuje zápisy do daného objektu.
  • 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 další obecná omezení.
  • Neukončující 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:

  • asyncMain 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 elementů řazené kolekce členů
    • 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.

Kompilátor má dvě možnosti -refout a -refonly řídí generování sestavení odkazem.

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 studené věci ve žíle 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í kondenzuje deklaraci proměnných, které se mají použít s out klíčovým slovem, a povolením více návratových hodnot prostřednictvím řazené kolekce členů. .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á v sadě Visual Studio 2015, vydala mnoho menších funkcí, které produktivnější programování v jazyce C#. Tady jsou některé z nich:

Mezi další nové funkce patří:

  • Inicializátory indexu
  • Await in catch/finally blocks
  • 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 často používaný jazyk, aby byl kód více terse 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í o danou verzi se dostalo do jiného základního konceptu jazyka: modelu async pro await asynchronní programování. Tady je hlavní seznam funkcí:

Atribut informací o volajícím umožňuje snadno načíst informace o kontextu, ve kterém běžíte, aniž byste se museli uchylovat k několika často používaným odrazovým kódům. 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 změnil hru tak, že upeče asynchrony do jazyka jako první účastník třídy.

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 vzájemné spolupráce zjednodušily nasazení vytváření sestavení zprostředkovatele komunikace modelu COM pro vaši aplikaci. Obecná kovariance a kontravariance vám poskytují větší sílu používat obecné typy, ale jsou trochu akademické a pravděpodobně nejvíce ocení tvůrci architektury a knihovny. Pojmenované a volitelné parametry umožňují eliminovat mnoho přetížení metod a poskytovat pohodlí. Ale žádná z těchto funkcí se přesně nemění.

Hlavní funkcí bylo zavedení klíčového dynamic slova. Klíčové dynamic slovo představené v jazyce C# verze 4.0 umožňuje přepsat kompilátor při psaní v čase kompilace. 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 pak k němu přidat šest a nechat ho až do modulu runtime, aby se vyřešilo, co by se mělo 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#. Vytvořil jazyk C# jako skutečně formidovatelný programovací jazyk. Podívejme se na některé hlavní funkce v této verzi:

V retrospektivě se mnohé z těchto funkcí jeví jako nevyhnutelné i neupravitelné. Všichni se vejdou 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 byste to teď mohli udělat stejně list.Average()jako . 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í:

  • Získání nebo oddělení přístupnosti
  • 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ů. Máte například List<T> možnost mít List<string> nebo List<int> provádět operace bezpečného typu u těchto řetězců nebo celých čísel při iteraci. Použití obecnýchtypůch ListIntArrayListObject

Jazyk C# verze 2.0 přinesl iterátory. Iterátory umožňují stručně zkoumat všechny položky v ( List nebo jiných výčtových typech) smyčkou foreach . Iterátory jako prvotřídní část jazyka výrazně zlepšila čitelnost jazyka a schopnost lidí zdůvodnění 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 IDisposableIEnumerator .foreachDisposeIEnumerator

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 teď podíváte zpátky na C# 1.0, zjistíte, že jste trochu závratný. Chyběly integrované asynchronní funkce a některé z funkcí lízání kolem obecných typů, které jste si vzali za udělené. Ve skutečnosti chybí obecné typy celkem. A LINQ? Zatím není k dispozici. Tyto dodatky by trvalo několik let, než se vydají.

C# verze 1.0 vypadala v porovnání s dnešním dnem oříznutými funkcemi. 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ánekpůvodně publikován na NDepend blog, se svolením Erik Dietrich a Patrick Smacchia.