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:
- Primární konstruktory – primární konstruktory můžete vytvořit v libovolném
class
typu nebostruct
typu. - Výrazy kolekce – nová syntaxe pro zadání výrazů kolekce, včetně elementu šíření (
..e
), pro rozbalení libovolné kolekce. - Vložená pole – vložená pole umožňují vytvořit pole s pevnou
struct
velikostí v typu. - Volitelné parametry ve výrazech lambda – u výrazů lambda můžete definovat výchozí hodnoty parametrů.
ref readonly
Parametry parametrů -ref readonly
umožňují srozumitelnější pro rozhraní API, která můžou používatref
parametry neboin
parametry.- Alias libovolný typ – direktivu
using
aliasu můžete použít k aliasu libovolného typu, nikoli pouze pojmenovaných typů. - Experimentální atribut – indikuje experimentální funkci.
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:
- Nezpracované řetězcové literály
- Obecná podpora matematiky
- Obecné atributy
- Řetězcové literály UTF-8
- Newlines in string interpolation expressions
- Vzory seznamů
- Místní typy souborů
- Požadované členy
- Automatické výchozí struktury
- Shoda
Span<char>
vzorů u konstantystring
- Rozšířený
nameof
obor - Numeric IntPtr
ref
pole ascoped ref
- Vylepšený převod skupiny metod na delegáta
- Výstražná vlna 7
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í:
- Struktury záznamů
- Vylepšení typů struktur
- Interpolované obslužné rutiny řetězců
global using
směrnice- Deklarace oboru názvů v oboru souborů
- Vzory rozšířených vlastností
- Vylepšení výrazů lambda
- Povolit
const
interpolované řetězce - Typy záznamů můžou zapečetit
ToString()
- Vylepšené určité přiřazení
- Povolit přiřazení i deklaraci ve stejné dekonstrukci
- Povolit
AsyncMethodBuilder
atribut u metod - CallerArgumentExpression – atribut
- Rozšířená direktiva
#line
pragma
V režimu preview byly k dispozici další funkce. Abyste mohli tyto funkce používat, musíte v Preview
projektu nastavit <LangVersion>
tyto funkce:
- Obecné atributy dále v tomto článku.
- statické abstraktní členy v rozhraních.
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:
- Záznamy
- Init only setters
- Příkazy nejvyšší úrovně
- Vylepšení porovnávání vzorů: relační vzory a logické vzory
- Výkon a interoperabilita
- Přizpůsobení a dokončení funkcí
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í and
or
, 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
Typynint
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()
proforeach
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í:
- Členové jen pro čtení
- Výchozí metody rozhraní
- Vylepšení porovnávání vzorů:
- Výrazy přepínače
- Vzory vlastností
- Vzory řazené kolekce členů
- Poziční vzory
- Použití deklarací
- Statické místní funkce
- Uvolnitelné struktury ref
- Odkazové typy s možnou hodnotou null
- Asynchronní streamy
- Indexy a rozsahy
- Přiřazení při souhlásání s hodnotou null
- Nespravované vytvořené typy
- Stackalloc ve vnořených výrazech
- Vylepšení interpolovaných doslovných řetězců
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 jakoin
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.
- Výsledkem podmíněného výrazu (
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.
- Vstupní bod aplikace může mít
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:
- Ven proměnné
- Řazené kolekce členů a dekonstrukce
- Porovnávání vzorů
- Lokální funkce
- Rozšířené členy výrazu s bodyied
- Referenční místní hodnoty
- Vrácení odkazu
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:
- Statické importy
- Filtry výjimek
- Inicializátory automatických vlastností
- Členové s bodyied výrazu
- Šíření null
- Interpolace řetězců
- nameof – operátor
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í:
- Asynchronní členy
- Atributy informací o volajícím
- Projekt kódu: Atributy informací o volajícím v jazyce C# 5.0
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:
- Dynamická vazba
- Pojmenované nebo volitelné argumenty
- Obecný kovariantní a kontravariant
- Vložené typy vzájemné spolupráce
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:
- Automaticky implementované vlastnosti
- Anonymní typy
- Výrazy dotazů
- Výrazy lambda
- Stromy výrazů
- Rozšiřující metody
- Implicitně zadané místní proměnné
- Částečné metody
- Inicializátory objektů a kolekcí
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:
- Obecné typy
- Částečné typy
- Anonymní metody
- Typy hodnot s možnou hodnotou null
- Iterátory
- Kovariance a kontravariance
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 ListInt
ArrayList
Object
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 .foreach
Dispose IEnumerator
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ánek původně publikován na NDepend blog, se svolením Erik Dietrich a Patrick Smacchia.