Název tohoto článku nemůže ztechnických důvodů obsahovat znak#. Správný název by měl býtC#.
C# (zpravidla vyslovováno anglicky jakoC Sharp, /siː šaːp/, což je anglické označenínotycis, tedy zvýšenéhoc) jevysokoúrovňovýobjektově orientovanýprogramovací jazyk vyvinutý firmouMicrosoft zároveň splatformou.NET Framework, později schválený standardizačními komisemiECMA (ECMA-334) aISO (ISO/IEC 23270). Microsoft založil C# na jazycíchC++ aJava (aje tedy nepřímým potomkem jazykaC, ze kterého čerpá syntaxi).
C# lze využít ktvorbě databázových programů, webových aplikací astránek,webových služeb, formulářových aplikací veWindows, softwaru pro mobilní zařízení (PDA amobilní telefony) atd.
Standard ECMA[1] definuje současný design C# takto:
C# je jednoduchý, moderní, mnohoúčelový aobjektově orientovaný programovací jazyk.
Jazyk ajeho implementace poskytuje podporu pro principysoftwarového inženýrství, jakými jsou kupř. hlídání hranic polí, detekce použití neinicializovaných proměnných a automatickýgarbage collector. Důležité jsou také jeho vlastnosti jako robustnost, trvanlivost aprogramátorská produktivita.
Jazyk je vhodný pro vývoj softwarových komponent distribuovaných vrůzných prostředích.
Přenositelnost zdrojového kódu je velmi důležitá, obzvláště pro ty programátory, kteří jsou obeznámeni sC aC++.
Mezinárodní podpora je též velmi důležitá.
C# je navržen pro psaní aplikací jak pro zařízení se sofistikovanými operačními systémy, tak pro zařízení somezenými možnostmi.
Přestože by programy psané vC# neměly plýtvat spřiděleným procesorovým časem apamětí, jazyk nebyl navržen pro to, aby se mohly měřit s aplikacemi psanými v C nebojazyce symbolických adres.
VC# neexistuje vícenásobnádědičnost – to znamená, že každátřída může být potomkem pouze jedné třídy. Toto rozhodnutí bylo přijato, aby se předešlo komplikacím apřílišné složitosti, která je spojena svícenásobnou dědičností. Třída ale může implementovat libovolný počet rozhraní.
Neexistují žádné globální proměnné ametody, všechny musí být deklarovány uvnitř tříd. Náhradou za globální proměnné a metody jsou statické metody aproměnné veřejných tříd.
Vobjektově orientovaném programování se zdůvodu dodržení principuzapouzdření často používá vzor, kdy kdatovým atributům třídy lze zvenčí přistupovat pouze nepřímo, ato pomocí dvou metod: metodyget (accessor) a metodyset (mutator). VC# lze místo toho definovat tzv. vlastnosti (anglickyproperty), která zvenčí stále funguje jako datový atribut, ale uvnitř obsahuje prostor pro definici obou těchto metod. Výhodou je jednodušší práce sdatovým atributem při zachování principu zapouzdření.
C# jetypově bezpečnější nežC++. Jediné předdefinované implicitní konverze (implicitnípřetypování) jsou takové, které jsou považovány za bezpečné. Příkladem budiž rozšiřování celočíselných typů (např. z32bitovéhoInteger na 64bitový) nebo konverze zodvozeného typu na typ rodičovský. Neexistuje však implicitní konverze zceločíselných typů naboolean ani implicitní konverze mezivýčtovými aceločíselnými typy.
C# nepotřebuje aani neobsahuje dopřednou deklaraci – pořadí deklarace metod není důležité.
Jazyk C# jecase sensitive – rozlišuje mezi velkými amalými písmeny. Identifikátory „hodnota“ a„Hodnota“ tedy nejsou, na rozdíl odVB .NET, ekvivalentní.
Společný typový systém (anglickyCommon Type System; CTS) je unifikovanýtypový systém používaný všemi jazyky pod .NET Framework, tedy ijazykem C# (dále napříkladVB.NET). Všechny typy (datové typy), včetněprimitivních datových typů jako je Integer, jsou potomky třídy System.Object adědí od ní ivšechny její metody jako například ToString().
Všechny hodnotové datové typy jsou na rozdíl od odkazových typů alokované nazásobníku ato zvýkonnostních důvodů.Hodnotové datové typy můžeme rozdělit do tří částí
Primitivní datové typy – Sem patří celočíselné primitivní datové typy (Byte, Integer, Char…) areálné primitivní datové typy reprezentující reálná čísla (float, double, decimal)
Struktury – Jedná se ouživatelsky definované datové typy. Na první pohled připomínají třídy, ale nemohou dědit ani být děděny.
Výčtové typy – Pojetí výčtů je například oproti Javě značně zjednodušené. VC# je výčet pouze množina předem definovaných hodnot (např. VýčetDnyVTydnu shodnotami pondělí, úterý…) bez možnosti definovat si uvnitř výčtu metody nebo atributy, indexery nebo implementovat rozhraní.
Referenční typy neuchovávají na rozdíl od typů hodnotových pouze hodnotu samotnou, ale odkaz (referenci) na místo vpaměti, kde je požadovanáinstance uložena. Všechny odkazové typy jsou alokovány nahaldě.
Jazyk C# je navržen tak, aby co nejvíce zohledňoval strukturuCommon Language Infrastructure(CLI), se kterou je používán. Většina základních typů vC# přímo odpovídá základním typům vplatformě CLI. Návrh jazyka ale nevyžaduje, abypřekladač generovalCommon Intermediate Language (CIL) nebo jiný konkrétní formát. Teoreticky je možné, aby překladač vytvářelstrojový kód podobný běžným překladačům jazyka C++ ajiných, ale vpraxi všechny překladače jazyka C# generují CIL.
První verze vydaná vroce 2002 společně s.NET Frameworkem1.0 obsahovala základní podporu objektového programování, ve které vycházela zjazyka C++ azkušeností sjejich aktualizací vjazyce Java.
Verze 1.2 byla vydána společně s Visual Studio .NET 2003. Obsahovala několik malých vylepšení jazyka. K této verzi nově patří i úprava smyčky foreach, která nově na svém konci volá Dispose pokud iterátor implementujeIDisposable.
Generika, neboliparametrizované typy, neboliparametrickýpolymorfizmus, je podporována od C# 2.0. Na rozdíl od C++ šablon jsou .NET parametrizované typy instanciovány (instance vytvářeny) za běhu, ane při kompilaci. Proto mohou být použity ivjiném jazyce, než byly napsány. Podporují některé funkce, jež nejsou podporovány přímo vC++ šablonách, např. typové omezení na generických parametrech vrozhraní. Na druhou stranu C# nepodporujenetypové generické parametry. Na rozdíl od generik vjazyce Java .NET generika používají zhmotnění parametrizovaných objektů první třídy vCLI Virtual Machine, které umožňuje optimalizace azachování druhu informací.
Částečné třídy (anglickypartial) umožňují vytvoření třídy, která má být rozdělena mezi několik souborů, přičemž každý soubor obsahuje jeden nebo více členů třídy. Toto se používá hlavně vpřípadě, že některé části třídy jsou generovány automaticky, zatímco jiné jsou psané programátorem. Například tuto funkci používáVisual Studio progenerování kódu při vytváření uživatelského rozhraní vnávrháři.
file1.cs:
publicpartialclassMyClass{publicvoidMyMethod1(){// Kód psaný programátorem}}
file2.cs:
publicpartialclassMyClass{publicvoidMyMethod2(){// Automaticky generovaný kód}}
Statické třídy jsou třídy, které nemohou být instanciovány, nemůže se znich dědit amohou mít pouze statické členy. Jejich účel je obdobný jako moduly vmnohaprocedurálních jazycích.
Nová forma iterátoru poskytující funkčnost generátoru
Nová forma iterátoru, poskytující funkčnost (implementaci) generátorukoprogramu, používá konstrukciyield return podobnou konstrukciyield vjazycePython.
// Metoda, která vezme iterovatelný vstup (například pole)// a vrátí všechna sudá čísla.publicstaticIEnumerable<int>GetEven(IEnumerable<int>numbers){foreach(intiinnumbers){if(i%2==0)yieldreturni;}}
Jako předchůdcelambda funkcí představených vC# 3.0 byly do C# 2.0 přidány anonymní delegáti. Zavádějí funkčnostuzávěrů do C#.[31] Kód uvnitř těla anonymního delegátu má plný přístup klokálním proměnným, parametrům metody ainstancím tříd, kroměout aref parametrů. Například:
stringstatus=string.Empty;publicstringStatus{get{returnstatus;}// kdokoliv může číst vlastnost,protectedset{status=value;}// ale pouze potomci ji mohou zapisovat}
Operátor?? je nazývánoperátorem koalescence aje používán pro definování implicitní hodnoty nullovatelných typů astejně tak ireferenčních typů. Operátor vrací levý operand, pokud není jeho hodnota rovnanull. Vopačném případě vrací pravý operand.[32]
objectnullObj=null;objectobj=newObject();returnnullObj??obj;// vrací obj
Primárně se tento operátor používá kpřiřazení hodnoty nullovatelného typu do nenullovatelné proměnné:
int?i=null;intj=i??0;// Jestliže i není null, nastav j na i. Jinak (pokud i je null), nastav j na 0.
Vyšel na konci roku 2007 společně s.NET Frameworkem 3.5 aVisual Studiem 2008. Obsahuje poměrně revoluční změny, které však nevyžadují změnu podkladového IL, takže aplikace vněm psané půjdou spouštět ina počítačích vybavených toliko druhým Frameworkem, ponesou-li si ssebou patřičné knihovny.
Language Integrated Query, tedy integrovaný dotazovací jazyk přináší nový způsob pro dotazování nad jakýmikoliv daty, usnadňuje jejich tvorbu, třídění avyhledávání vnich. LINQ to Objects umožňuje dotazování nad normálními objekty (respektive jejich kolekcemi), LINQ to SQL přináší nový způsob pro práci sdatabázemi a LINQ to XML umožňuje pracovat sXML soubory.Následující příklad ukazuje dotaz LINQ který nám ze zdrojového pole vrátí druhé mocniny všech lichých čísel avýsledky seřadí sestupně. Všimněte si podobnosti se syntaxíSQL.
int[]myArray={1,5,2,10,7};IEnumerable<int>query=fromxinmyArray//Požadujeme všechny elementy z pole myArray,wherex%2==1//kde zbytek po celočíselném dělení (modulo) je roven 1orderbyxdescending//výsledek požadujeme seřazen sestupněselectx*x;//a vrácená čísla umocníme na druhou// Výsledek : 49, 25, 1
Pomocílambda výrazů, jež si berou inspiraci zfunkcionálního programování, je možné tvořitanonymní metody, které obsahují jeden výraz nebo několik příkazů apoužít je vsituaci, kdy je očekávána instance delegáta.Pro potřebu lambda výrazů byl do C# 3.0 uveden nový operátor=>. Ten se nazývá „přecházív“.
VC# 2.0 bychom vyhledávání prvků vseznamu pomocíanonymní metody napsali například takto:
Všimněte si, že se neuvádějí typy argumentů (tedy žei je Integer), ale podobně jako uklíčového slovavar je typ argumentu odvozen vdoběkompilace (tedy ne za běhu, takže je stále dodrženatypová bezpečnost) zkontextu.
Obecně tedy lambda výraz zapisujeme jako(vstupní argumenty) => výraz.
Pomocí rozšiřujících metod můžeme vyvolat dojem, že třída má metody, které jsou ve skutečnosti zapsány mimo tuto třídu. Rozšiřující metody jsou ve skutečnosti statické metody, které se dají volat jako metody instance. Následující příkaz ukazuje, jak můžeme rozšířit třídu string onovou metodu, kterou deklarujeme voddělené třídě StringExtensions. Na jakékoliv instanci třídystring poté můžeme volat naši novou metodu.
Typ proměnnéx bude určen podle pravé strany výrazu ato již vdobě překladu. To není jen zkrácení zápisu pro inicializaci proměnných, ale jde oformu zápisu, která se používá při deklaraci proměnných anonymních typů.
Výrazové stromy (anglickyExpression Trees) umožňují pracovat skódem nejen jako se spustitelnými příkazy, ale také jako sdaty. Můžeme tedy vaplikaci vytvořit stromovou strukturu reprezentující kód. Uté pak můžeme sledovat její veřejné vlastnosti ana základě toho ji analyzovat, zjistit všechny potřebné informace, popřípadě ji optimalizovat. Vpřípadě potřeby ji můžeme dálezkompilovat do spustitelné podoby pomocí metodycompile.
Tato verze vyšla vdubnu 2010. Nová verze se zaměřuje hlavně na spolupráci sdynamickými aspekty programování aframeworky, jako napříkladmodul runtime dynamického jazyka (anglickyDynamic Language Runtime;DLR) aobjektový model komponent (Component Object Model;COM). Mezi další novinky patří:
Verze 5.0 byla uvedena vsrpnu 2012 společně s.NET Framework 4.5 avývojovým prostředímVisual Studio 2012 (případněMono 3.0. Novinkou vtéto verzi je podpora asynchronního programování přidáním klíčových slovasync aawait. Další novinkou jsouCaller Information atributy pro jednodušší zjištění informací ovolající metodě.[33]
Také došlo kněkolika zpětně nekompatibilním změnám (breaking changes). Poměrně výrazná změna nastává při zachycení iterační proměnné cykluforeach vanonymních metodách. Před verzí C# 5.0 byla iterační proměnná umístěna vně cyklu abyla použita pro všechny iterace. Od verze C# 5.0 je iterační proměnná uvnitř cyklu aje vkaždé iteraci čerstvou proměnnou.
Další změnou je změna pořadí vyhodnocení parametrů metod při použití pojmenovaných parametrů. Vpředchozí verzi jazyka byly nejprve vyhodnoceny pojmenované parametry ateprve poté ostatní parametry. Od verze C# 5.0 jsou všechny parametry vyhodnocovány zleva doprava vpořadí vjakém jsou uvedeny.
.NET 7/C#11 zavádí možnost mít v rozhraní přetížitelné operátory (static abstract astatic virtual ) a tím dále rozšiřuje podporu generické matematiky zavedené v .NET 6/C#10.
Požadavek, aby druhý operand bylint neboimplicitně převoditelný naint jazyk C# 11 odstraňuje. Tato změna umožňuje na těchto místech používat typy, které implementují obecná matematická rozhraní.
Zavedení možnosti definovat kontrolovanéchecked a nekontrolovanéuncheckedaritmetické operátory, kdy překladač vygeneruje volání správné varianty na základě aktuálního kontextu.
K dispozici od Visual Studia 2022 verze 17.3. Jako je typint aliasem proSystem.Int32, jsou nyní typynint anuint aliasy proSystem.IntPtr aSystem.UIntPtr.[37]
Nové řádky v řetězcových interpolačních výrazech (string interpolation)
K dispozici od Visual Studia 2022 verze 17.1. Usnadnění čtení interpolovaného řetězce – textu uvnitř znaků{ a}, rozdělením textu na více řádků. Text může obsahovat například dotazy LINQ neboswitch. Interpolovaný řetězec je analyzován jako kód C#, včetně nových řádků.
Vzor vyřazení_ (discard pattern) odpovídá libovolnému jednotlivému znaku. Vzor rozsahu.. (range pattern) reprezentuje libovolnou posloupnost (nula nebo více prvků).
K dispozici od Visual Studia 2022 verze 17.2. Předchozí verze standardu zakazovaly překladači opakovaně použít objekt delegáta vytvořenou pro převod skupiny metod. Nově se při převodu skupiny metod objekt delegáta vytvořený překladačem jazyka C# 11 ukládá do mezipaměti (cache). A používá se tento objekt delegáta. Konverze může, ale nemusí, použít existující instanci delegáta, která již odkazy obsahuje.
// Příklad převodu skupiny metod:delegatestringD1(objecto);delegateobjectD2(strings);delegateobjectD3();delegatestringD4(objecto,paramsobject[]a);delegatestringD5(inti);classTest{staticstringF(objecto){returnnull;}staticvoidG(){D1d1=F;// OkD2d2=F;// OkD3d3=F;// Chyba kompilace: Žádné přetížení pro 'F' neodpovídá delegátu 'D3'D4d4=F;// Chyba kompilace: Žádné přetížení pro 'F' neodpovídá delegátu 'D4'D5d5=F;// Chyba kompilace: Žádné přetížení pro 'Test.F(object)' neodpovídá delegátu 'D5'}}
K dispozici od Visual Studia 2022 verze 17.2. Jedná se o nový formát pro řetězcové literály. Literál surového řetězce začíná alespoň třemi znaky po sobě jdoucích dvojitých uvozovek ("""). Nové řádky následující za úvodní a před závěrečnou uvozovkou se do konečného obsahu nezapočítávají.
K dispozici od Visual Studia 2022 verze 17.3. Automatické výchozí nastavení struktur. Překladač jazyka C# 11 zajistí, že všechny položky struktury (typustruct) budou inicializovány na výchozí hodnotu v rámci provádění konstruktoru. Každá členská proměnná nebo automatická vlastnost, která není inicializována pomocí konstruktoru, je nově automaticky inicializována překladačem.
Testování shody vzoruSpan<char> aReadOnlySpan<char> na konstantním řetězci
K dispozici od Visual Studia 2022 verze 17.3. Podobě, jako při testování pomocí porovnávání vzorů (pattern match), jestli řetězec obsahuje danou konstantní hodnotu, je nyní možné použít testování vzorů s proměnnými, které jsouSpan<char> neboReadOnlySpan<char>.
K dispozici od Visual Studia 2022 verze 17.3. Operátornameof nově vyhodnocuje názvy parametrů a názvy parametrů typu v deklaraci atributu dané metody. Operátornameof je tak možné využít k zadání názvu parametru metody v atributu v deklaraci metody nebo parametru. Využití je například pro přidávání atributů pro analýzu nulovatelnosti.
Zaveden je modifikátorrequired, který je možné použít pro vlastnosti a členské proměnné a vynutit, aby je konstruktory a volání inicializovali. Překladač všechny požadované členy třídy inicializuje, má-li konstruktor atributSystem.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute.
Uvnitř strukturyref struct je možné deklarovat členské proměnnéref. U typů jakoSystem.Span<T> tak není třeba uvádět speciální atributy ani skryté vnitřní typy. K deklaraci ref je možné připojit modifikátor rozsahu viditelnosti a omezit tak rozsah, kde může být odkaz použit.
K dispozici od Visual Studia 2022 verze 17.2. Jedná se o varování (Warnings) a chyby (Errors) přidané v jazyce C# 11:[38]
CS8981 – název typu obsahuje pouze maléascii znaky Všechna nová klíčová slova přidaná pro jazyk C# budou obsahovat malá písmena ASCII. Toto upozornění zajistí, že žádný z vašich typů nebude v konfliktu s budoucími klíčovými slovy. Následující kód vytváří CS8981:
publicclassnazevmalymipismeny{}
CS8826 – deklarace částečných metod se liší v signaturách
CS7023 – ve výrazuis neboas je použit statický typ
CS8073 – výsledkem výrazu je vždyfalse (nebotrue).
CS8848 – z důvodu priority zde nelze použít operátor 'from', pro ujasnění použijte závorky
použití nepřiřazené proměnné, členy musí být plně přiděleny (CS8880, CS8881, CS8882, CS8883, CS8884, CS8885, CS8886, CS8887)
CS8892 – byl nalezen synchronní vstupní bod 'method', metoda nebude použita jako vstupní bod
CS8897 – statické typy nelze použít jako parametry
CS8898 – statické typy nelze použít jako návratové typy
Jazyk C# 11 je podporován pouze ve verzi .NET 7 a novějších, C# 10 v .NET 6 a novějších, C# 9 v .NET 5 a novějších, C# 8.0 v .NET Core 3.x a novějších.[39]
Výchozí verze cílového rámce (.NET SDK), kterou na základě pravidel určí překladač jazyka C#[39][40][41][42]
Rozeberme krátce jednotlivé příkazy. Třídy, základní jednotky objektového programování, jsou vC# rozděleny pro lepší orientaci ajednoznačnost názvů do jmenných prostorů. Na počátku zdrojového kódu jmenujeme příkazemusing jmenné prostory, jež budeme používat – nebudeme pak muset rozepisovat jejich název, všechny třídy znich jsou nám hned přístupny.
Na dalším řádku příkazemnamespace říkáme, že chceme zařadit kód vymezený následujícími složenými závorkami do jmenného prostoruMojeKonzolováAplikace. Hned poté definujeme klíčovým slovem class třídu Hlavní třída, její obsah bude opět vymezen dalšími složenými závorkami. Kód není nutné odsazovat (bílé znaky se ignorují), jen je to praktické.
Všimněme si také, že identifikátory mohou obsahovat písmenka sháčky ačárkami – je tomu tak již od prvních verzí jazyka.
Překladač hledá při vytváření spustitelného souboru vstupní bod aplikace. Musí se jednat ostatickou metodu nevracející žádnou hodnotu nebo typint (celé číslo), která buď nepřebírá žádné argumenty, nebo pole řetězců (stringů) akterá se jmenuje Main. Deklaraci takové metody vidíme na dalším řádku programu. Klíčové slovo static značí statickou metodu, tedy takovou část kódu, kterou je možno volat bez vytvoření instance třídy. Klíčové slovo void značí, že metoda nic nevrací.
Argumenty metody se vypisují do obyčejných závorek za její název. Podobně jako při deklarování proměnných se nejdříve uvádí typ proměnné (string[]) apak její název (args). Pole značíme dvojicí hranatých závorek za názvem typu.
Tělo metody tvoří jediný řádek ukončený středníkem. Volá statickou metodu třídyConsole (sídlí ve jmenném prostoruSystem) jménemWriteLine, která za argument pojímá jedinou proměnnou typustring, kterou vypíše uživateli do konzole. Řetězce se ohraničují počítačovými uvozovkami.
Microsoft Visual Studio je oficiální vývojové prostředí od společnosti Microsoft určené proMicrosoft Windows, ve verzi Visual Studio Community je kdispozici zdarma, ostatní edice jsou zpoplatněny
Systém dokumentace kódu je podobnýJavaDoc, používanému vjazyce Java. Významným rozdílem je ale to, že je založen na XML. Následující příkaz ukazuje komentář kmetodě.
Jak vidíme, každý řádek komentáře musí začínat řetězcem "///". Tyto komentáře často používají nástroje jako IntelliSense integrovaný vMicrosoft Visual Studiu, který programátorovi při psaní kódu napovídá.
Název jazyka C# je odvozen zhudební notace, kde křížek označuje zvýšení noty opůl tónu avtomto případě by označoval notu cis, tedy C zvýšené opůl tónu. Podobně vznikl název jazyka C++ jako zlepšení jazyka C: „++“ totiž vsyntaxi jazyka C znamená zvýšení hodnoty proměnné o1.
Křížek na počítačové klávesnici (#) akřížek vhudební nauce (♯) jsou dva odlišné znaky. Pro zápis názvu jazyka C Sharp se nepoužívá znak hudebního křížku ztechnických důvodů, protože tento se na standardní klávesnici nevyskytuje, ale pro zjednodušení se používá klasický křížek. Toto je zakotveno ve specifikaci jazyka C#, ECMA-334. Jak jsme již řekli, toto opatření je spíše praktického rázu, takže vpřípadech jako jsou různé marketingové materiály se často používá znak křížku zhudební notace.
↑What's new in the C# 2.0 Language and Compiler [online]. Microsoft [cit. 2014-06-11].Dostupné varchivu pořízeném zoriginálu dneDecember 18, 2010.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑HEJLSBERG, Anders; TORGERSEN, Mads.Overview of C# 3.0 [online]. Microsoft [cit. 2014-06-11].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Using C# 3.0 from .NET 2.0 [online]. Danielmoth.com, May 13, 2007 [cit. 2012-10-04].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Using C# 3.0 from .NET 2.0 [online]. Danielmoth.com, May 13, 2007 [cit. 2012-10-04].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑HEJLSBERG, Anders.Future directions for C# and Visual Basic [online]. Microsoft [cit. 2011-09-21].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑An Introduction to New Features in C# 5.0 [online]. Microsoft [cit. 2014-06-11].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Language feature implementation status [online]. Microsoft [cit. 2015-02-13].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 7 [online]. 2016-12-21.Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑New Features in C# 7.0 [online]. March 9, 2017 [cit. 2017-06-09].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 7.1 [online]. [cit. 2017-10-09].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Visual Studio 2017 15.3 Release Notes [online].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 7.2 [online]. [cit. 2017-11-26].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
12Visual Studio 2017 15.9 Release Notes [online].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 7.3 [online]. [cit. 2018-06-23].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 8.0 [online].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑ What's new in .NET Core 3.0.docs.microsoft.com [online].Microsoft, 2022-06-29 [cit. 2022-07-20].Dostupné online. (anglicky)
↑ What's new in .NET Core 3.1.docs.microsoft.com [online].Microsoft, 2022-07-12 [cit. 2022-07-20].Dostupné online. (anglicky)
↑BILLWAGNER.What's new in C# 9.0 - C# Guide [online]. [cit. 2020-10-15].Dostupné online. (anglicky)Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Visual Studio 2019 16.8 Release Notes [online].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑What's new in C# 10 [online]. [cit. 2021-11-10].Dostupné online. (anglicky)Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑Visual Studio 2022 version 17.0 Release Notes [online].Dostupné online.Je zde použita šablona{{Cite web}} označená jako k „pouze dočasnému použití“.
↑BILLWAGNER. What's new in C# 12:Get an overview of the new features in C# 12.learn.microsoft.com [online].Microsoft, 2023-08-18 [cit. 2023-10-21].Dostupné online. (anglicky)
↑GEWARREN. Novinky v .NET 8.learn.microsoft.com [online]. 2023-10-07 [cit. 2023-10-21].Dostupné online.
12VEDHAR. Zpráva k vydání verze Visual Studio 2022 Preview.learn.microsoft.com [online]. 2023-10-11 [cit. 2023-10-21].Dostupné online.
↑?? Operator (C# Reference) [online]. Microsoft [cit. 2008-11-23].Dostupné online.
↑What's New for Visual C# in Visual Studio 2012 [online]. Microsoft Developer Network [cit. 2013-08-02].Dostupné online.
12345DIETRICH, Erik; SMACCHIA, Patrick. The history of C# - C# Guide.docs.microsoft.com [online]. Microsoft, 2022-06-16 [cit. 2022-07-05]. Článek byl původně publikován na blogu NDepend.Dostupné online. (anglicky)
↑BILLWAGNER. What's new in C# 11 - C# Guide.docs.microsoft.com [online]. [cit. 2022-07-05].Dostupné online. (anglicky)
↑ What's new in .NET 7.learn.microsoft.com [online].Microsoft, 2023-01-10 [cit. 2023-01-30].Dostupné online. (anglicky)