C Sharp

C#
Paradigmamultiparadigmatický
Vznik2000
AutorMicrosoft
VývojářMicrosoft
Hlavní implementaceVisual C#, .NET, Mono, DotGNU
DialektyCω, Spec#, Polyphonic C#
Ovlivněn jazykyC, C++, Eiffel, Haskell, Java, Object Pascal
Ovlivnil jazykyD, F#, Dart, Java, Vala

C# (zpravidla vyslovováno anglicky jako C Sharp, /siː šaːp/, což je anglické označení noty cis, tedy zvýšeného c) je vysokoúrovňový objektově orientovaný programovací jazyk vyvinutý firmou Microsoft zároveň s platformou .NET Framework, později schválený standardizačními komisemi ECMA (ECMA-334) a ISO (ISO/IEC 23270). Microsoft založil C# na jazycích C++Java (a je tedy nepřímým potomkem jazyka C, ze kterého čerpá syntaxi).

C# lze využít k tvorbě databázových programů, webových aplikací a stránek, webových služeb, formulářových aplikací ve Windows, softwaru pro mobilní zařízení (PDA a mobilní telefony) atd.

Cíle jazyka

Standard ECMA definuje současný design C# takto:

Vlastnosti jazyka

CTS

Společný typový systém (anglicky Common Type System; CTS) je unifikovaný typový systém používaný všemi jazyky pod .NET Framework, tedy i jazykem C# (dále například VB.NET). Všechny typy (datové typy), včetně primitivních datových typů jako je Integer, jsou potomky třídy System.Object a dědí od ní i všechny její metody jako například ToString().

Typy v CTS se dělí do dvou základních skupin a to:

Hodnotové datové typy

Všechny hodnotové datové typy jsou na rozdíl od odkazových typů alokované na zásobníku a to z výkonnostních důvodů. Hodnotové datové typy můžeme rozdělit do tří částí

Referenční datové typy

Referenční typy neuchovávají na rozdíl od typů hodnotových pouze hodnotu samotnou, ale odkaz (referenci) na místo v paměti, kde je požadovaná instance uložena. Všechny odkazové typy jsou alokovány na haldě.

Používané platformy

Jazyk C# je navržen tak, aby co nejvíce zohledňoval strukturu Common Language Infrastructure (CLI), se kterou je používán. Většina základních typů v C# přímo odpovídá základním typům v platformě CLI. Návrh jazyka ale nevyžaduje, aby překladač generoval Common Intermediate Language (CIL) nebo jiný konkrétní formát. Teoreticky je možné, aby překladač vytvářel strojový kód podobný běžným překladačům jazyka C++ a jiných, ale v praxi všechny překladače jazyka C# generují CIL.

Historie a verze jazyka

Přehled

Verze jazyka
Version Specifikace jazyka Datum .NET Visual Studio
Ecma ISO/IEC Microsoft Uvolnění Ukončení podpory
C# 1.0 prosinec 2001 ECMA-334:2001

prosinec 2002 ECMA-334:2002

červen 2005 ECMA-334:2005

duben 2003 ISO/IEC 23270:2003 leden 2002 leden 2002 .NET Framework 1.0 Visual Studio .NET 2002
C# 1.1

C# 1.2

říjen 2003 duben 2003 Visual Studio .NET 2003
C# 2.0 červen 2006 ECMA-334:2006 září 2006 ISO/IEC 23270:2006 září 2005 listopad 2005 Visual Studio 2005

Visual Studio 2008

C# 3.0 srpen 2007 listopad 2007 .NET Framework 2.0 (s výjimkou LINQ)

.NET Framework 3.0 (s výjimkou LINQ)

.NET Framework 3.5

Visual Studio 2008
C# 4.0 duben 2010 duben 2010 .NET Framework 4 Visual Studio 2010
C# 5.0 prosinec 2017 ECMA-334:2017 prosinec 2018 ISO/IEC 23270:2018 červen 2013 srpen 2012 Visual Studio 2012

Visual Studio 2013

C# 6.0 červen 2022 ECMA-334:2022 návrh specifikacevlastnosti červenec 2015 Visual Studio 2015
C# 7.0 návrh specifikacevlastnosti březen 2017 Visual Studio 2017 verze 15.0
C# 7.1 vlastnosti Archivováno 11. 3. 2021 na Wayback Machine. srpen 2017
  • .NET Core 2.0
Visual Studio 2017 verze 15.3
C# 7.2 vlastnosti listopad 2017 Visual Studio 2017 verze 15.5
C# 7.3 vlastnosti Archivováno 7. 3. 2021 na Wayback Machine. květen 2018 Visual Studio 2017 verze 15.7
C# 8.0 vlastnosti září 2019 .NET Core 3.0 Visual Studio 2019 version 16.3
prosinec 2019 .NET Core 3.1 Visual Studio 2019 verze 16.4
C# 9.0 vlastnosti listopad 2020
  • .NET 5.0
Visual Studio 2019 verze 16.8
C# 10.0 vlastnosti listopad 2021
  • .NET 6.0
  • .NET 6.0.1
Visual Studio 2022 verze 17.0
10. říjen 2023 12. listopad 2024 .NET 6.0.23
C# 11.0 vlastnosti listopad 2022 .NET 7.0 Visual Studio 2022 verze 17.4
10. říjen 2023 14. květen 2024 .NET 7.0.12
C# 12.0 vlastnosti říjen 2023 .NET 8.0.0 (RC) 2 Visual Studio 2022 verze 17.8 (Preview)

C Sharp 1.0

První verze vydaná v roce 2002 společně s .NET Frameworkem 1.0 obsahovala základní podporu objektového programování, ve které vycházela z jazyka C++ a zkušeností s jejich aktualizací v jazyce Java.

C Sharp 1.1

C Sharp 1.2

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 implementuje IDisposable.

C Sharp 2.0

Na další verzi se čekalo až do konce roku 2005. Mezi její nové vlastnosti patří:

Generika

Generika, neboli parametrizované typy, neboli parametrický 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, a ne při kompilaci. Proto mohou být použity i v jiném jazyce, než byly napsány. Podporují některé funkce, jež nejsou podporovány přímo v C++ šablonách, např. typové omezení na generických parametrech v rozhraní. Na druhou stranu C# nepodporuje netypové generické parametry. Na rozdíl od generik v jazyce Java .NET generika používají zhmotnění parametrizovaných objektů první třídy v CLI Virtual Machine, které umožňuje optimalizace a zachování druhu informací.

Částečné třídy

Částečné třídy (anglicky partial) 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ě v pří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 pro generování kódu při vytváření uživatelského rozhraní v návrháři.

file1.cs:

public partial class MyClass { public void MyMethod1() { // Kód psaný programátorem } }

file2.cs:

public partial class MyClass { public void MyMethod2() { // Automaticky generovaný kód } } Statické třídy

Statické třídy jsou třídy, které nemohou být instanciovány, nemůže se z nich dědit a mohou mít pouze statické členy. Jejich účel je obdobný jako moduly v mnoha procedurálních jazycích.

Nová forma iterátoru poskytující funkčnost generátoru

Nová forma iterátoru, poskytující funkčnost (implementaci) generátoru koprogramu, používá konstrukci yield return podobnou konstrukci yield v jazyce Python.

// Metoda, která vezme iterovatelný vstup (například pole) // a vrátí všechna sudá čísla. public static IEnumerable<int> GetEven(IEnumerable<int> numbers) { foreach (int i in numbers) { if (i % 2 == 0) yield return i; } } Anonymní delegáty

Jako předchůdce lambda funkcí představených v C# 3.0 byly do C# 2.0 přidány anonymní delegáti. Zavádějí funkčnost uzávěrů do C#. Kód uvnitř těla anonymního delegátu má plný přístup k lokálním proměnným, parametrům metody a instancím tříd, kromě out a ref parametrů. Například:

int SumOfArrayElements(int array) { int sum = 0; Array.ForEach( array, delegate(int x) { sum += x; } ); return sum; } Možnost nastavení jiné přístupnosti pro čtení a zapisování vlastností třídy

Například:

string status = string.Empty; public string Status { get { return status; } // kdokoliv může číst vlastnost, protected set { status = value; } // ale pouze potomci ji mohou zapisovat } Nullovatelné typy

Nullovatelné typy (označené otazníkem, např. int? i = null) přidávají hodnotu null do množiny povolených hodnot pro jakýkoliv datový typ.

Operátor koalescence

Operátor ?? je nazýván operátorem koalescence a je používán pro definování implicitní hodnoty nullovatelných typů a stejně tak i referenčních typů. Operátor vrací levý operand, pokud není jeho hodnota rovna null. V opačném případě vrací pravý operand.

object nullObj = null; object obj = new Object(); return nullObj ?? obj; // vrací obj

Primárně se tento operátor používá k přiřazení hodnoty nullovatelného typu do nenullovatelné proměnné:

int? i = null; int j = i ?? 0; // Jestliže i není null, nastav j na i. Jinak (pokud i je null), nastav j na 0.

C Sharp 3.0

Vyšel na konci roku 2007 společně s .NET Frameworkem 3.5 a Visual Studiem 2008. Obsahuje poměrně revoluční změny, které však nevyžadují změnu podkladového IL, takže aplikace v něm psané půjdou spouštět i na počítačích vybavených toliko druhým Frameworkem, ponesou-li si s sebou patřičné knihovny.

LINQ

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í a vyhledávání v nich. 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 s databázemi a LINQ to XML umožňuje pracovat s XML 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 a výsledky seřadí sestupně. Všimněte si podobnosti se syntaxí SQL.

int myArray = { 1, 5, 2, 10, 7 }; IEnumerable<int> query = from x in myArray //Požadujeme všechny elementy z pole myArray, where x % 2 == 1//kde zbytek po celočíselném dělení (modulo) je roven 1 orderby x descending//výsledek požadujeme seřazen sestupně select x * x;//a vrácená čísla umocníme na druhou // Výsledek : 49, 25, 1 Lambda výrazy

Pomocí lambda výrazů, jež si berou inspiraci z funkcionálního programování, je možné tvořit anonymní metody, které obsahují jeden výraz nebo několik příkazů a použít je v situaci, 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“.

V C# 2.0 bychom vyhledávání prvků v seznamu pomocí anonymní metody napsali například takto:

List<int> seznamCisel = new List<int> { 1, 2, 3, 4, 5 }; List<int> vysledek = seznamCisel.FindAll(delegate(int i) { return i < 4; });

A ta samá funkčnost napsaná pomocí lambda výrazu v C# 3.0:

List<int> seznamCisel = new List<int> { 1, 2, 3, 4, 5 }; List<int> vysledek = seznamCisel.FindAll(i => i < 4);

Všimněte si, že se neuvádějí typy argumentů (tedy že i je Integer), ale podobně jako u klíčového slova var je typ argumentu odvozen v době kompilace (tedy ne za běhu, takže je stále dodržena typová bezpečnost) z kontextu.

Obecně tedy lambda výraz zapisujeme jako (vstupní argumenty) => výraz.

Inicializátory objektů a kolekcí Zakaznik z = new Zakaznik(); z.Jmeno = "Petr";

Můžeme zkráceně zapsat jako:

Zakaznik z = new Zakaznik { Jmeno="Petr" };

Zápis inicializace kolekcí pak můžeme také zkrátit z původního

MujSeznam seznam = new MujSeznam(); seznam.Add(1); seznam.Add(2);

na zkrácené:

MujSeznam seznam = new MujSeznam { 1, 2 };

Za předpokladu, že naše třída MujSeznam implementuje rozhraní System.Collections.IEnumerable a má veřejnou metodu Add.

Rozšiřující metody

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 o novou metodu, kterou deklarujeme v oddělené třídě StringExtensions. Na jakékoliv instanci třídy string poté můžeme volat naši novou metodu.

public static class StringExtensions { public static string Left(this string s, int n) { return s.Substring(0, n); } } string s = "foo"; s.Left(3); // Stejné jako StringExtensions.Left(s, 3); Klíčové slovo var Dictionary<string, List<float>> x = new Dictionary<string, List<float>>();

Můžeme nyní zapsat jako

var x = new Dictionary<string, List<float>>();

Typ proměnné x bude určen podle pravé strany výrazu a to již v době překladu. To není jen zkrácení zápisu pro inicializaci proměnných, ale jde o formu zápisu, která se používá při deklaraci proměnných anonymních typů.

Výrazové stromy

Výrazové stromy (anglicky Expression Trees) umožňují pracovat s kódem nejen jako se spustitelnými příkazy, ale také jako s daty. Můžeme tedy v aplikaci vytvořit stromovou strukturu reprezentující kód. U té pak můžeme sledovat její veřejné vlastnosti a na základě toho ji analyzovat, zjistit všechny potřebné informace, popřípadě ji optimalizovat. V případě potřeby ji můžeme dále zkompilovat do spustitelné podoby pomocí metody compile.

Anonymní třídy

Anonymní třídy umožňující např. rychlé vytvoření objektů přenášejících informace vyžádané z databáze přes LINQ.

C Sharp 4.0

Tato verze vyšla v dubnu 2010. Nová verze se zaměřuje hlavně na spolupráci s dynamickými aspekty programování a frameworky, jako například modul runtime dynamického jazyka (anglicky Dynamic Language Runtime; DLR) a objektový model komponent (Component Object Model; COM). Mezi další novinky patří:

C Sharp 5.0

Verze 5.0 byla uvedena v srpnu 2012 společně s .NET Framework 4.5 a vývojovým prostředím Visual Studio 2012 (případně Mono 3.0. Novinkou v této verzi je podpora asynchronního programování přidáním klíčových slov async a await. Další novinkou jsou Caller Information atributy pro jednodušší zjištění informací o volající metodě.

Změny chování

Také došlo k ně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é cyklu foreach v anonymních metodách. Před verzí C# 5.0 byla iterační proměnná umístěna vně cyklu a byla použita pro všechny iterace. Od verze C# 5.0 je iterační proměnná uvnitř cyklu a je v každé iteraci čerstvou proměnnou.

Další změnou je změna pořadí vyhodnocení parametrů metod při použití pojmenovaných parametrů. V předchozí verzi jazyka byly nejprve vyhodnoceny pojmenované parametry a teprve poté ostatní parametry. Od verze C# 5.0 jsou všechny parametry vyhodnocovány zleva doprava v pořadí v jakém jsou uvedeny.

C Sharp 6.0

Byl uvolněn spolu s Visual Studio 2015 a doplněn o menší funkce pro zvýšení produktivity programování v jazyce C#:

a další nové funkce, jako:

C Sharp 7.0

Byl uvolněn spolu s Visual Studio 2017. Nově se objevilo:

C Sharp 7.1

Doplnil:

C Sharp 7.2

C Sharp 7.3

C Sharp 8.0

C Sharp 9

Nové a vylepšené funkce:

C Sharp 10

Doplňuje:

C Sharp 11

C# 11 byl uvolněn v listopadu 2022 a přišel s NET 7.0 a vývojovým prostředím Visual Studio 2022 verze 17.4.

Přináší:

Obecné atributy (generic attributes)

K dispozici od Visual Studia 2022 verze 17.1.

Vytvoření obecného atributu

public class GenericAttribute<T> : Attribute { }

a použití

public string Method() => default; Podpora generické matematiky (Generic math support)

K dispozici od Visual Studia 2022 verze 17.3. Není potřeba znát přesný datový typ.

Statické virtuální členy v rozhraních

.NET 7/C# 11 zavádí možnost mít v rozhraní přetížitelné operátory (static abstract a static virtual ) a tím dále rozšiřuje podporu generické matematiky zavedené v .NET 6/C# 10.

Neznaménkový operátor posunu doprava >>> (unsigned shift operator)

Eliminuje se potřeba převádět celé číslo se znaménkem na typ bez znaménka, provést posun a výsledek převést zpět na typ se znaménkem.

Uvolnění operátorů posunu

Požadavek, aby druhý operand byl int nebo implicitně převoditelný na int jazyk C# 11 odstraňuje. Tato změna umožňuje na těchto místech používat typy, které implementují obecná matematická rozhraní.

Operátory kontroly checked a unchecked definované uživatelem

Zavedení možnosti definovat kontrolované checked a nekontrolované unchecked aritmetické operátory, kdy překladač vygeneruje volání správné varianty na základě aktuálního kontextu.

Číselný (numerický) IntPtr a UIntPtr

K dispozici od Visual Studia 2022 verze 17.3. Jako je typ int aliasem pro System.Int32, jsou nyní typy nint a nuint aliasy pro System.IntPtr a System.UIntPtr.

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 nebo switch. Interpolovaný řetězec je analyzován jako kód C#, včetně nových řádků.

Vzory seznamů (list patterns)

K dispozici od Visual Studia 2022 verze 17.1. Zavádí porovnávání pole nebo seznamu s posloupností vzorů.

int numbers = { 1, 2, 3 }; Console.WriteLine(numbers is ); // True Console.WriteLine(numbers is ); // False Console.WriteLine(numbers is ); // False Console.WriteLine(numbers is ); // True Console.WriteLine(numbers is ); // True Console.WriteLine(numbers is ); // False Console.WriteLine(numbers is ); // True Console.WriteLine(numbers is ); // True Console.WriteLine(numbers is ); // False

Vzor vyřazení _ (discard pattern) odpovídá libovolnému jednotlivému znaku. Vzor rozsahu .. (range pattern) reprezentuje libovolnou posloupnost (nula nebo více prvků).

Vylepšený převod skupiny metod na delegáta

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: delegate string D1(object o); delegate object D2(string s); delegate object D3(); delegate string D4(object o, params object a); delegate string D5(int i); class Test { static string F(object o) { return null; } static void G() { D1 d1 = F;         // Ok D2 d2 = F;         // Ok D3 d3 = F;         // Chyba kompilace: Žádné přetížení pro 'F' neodpovídá delegátu 'D3' D4 d4 = F;         // Chyba kompilace: Žádné přetížení pro 'F' neodpovídá delegátu 'D4' D5 d5 = F;         // Chyba kompilace: Žádné přetížení pro 'Test.F(object)' neodpovídá delegátu 'D5' } } Surové řetězcové literály (raw string literals)

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

string x = "text"; Console.WriteLine("Výstup:" + $$""" Příklad "{{x}}u". """ + "Konec"); /* Výstup:Příklad "textu".Konec */

Více znaků $ označuje, kolika po sobě jdoucími závorkami interpolace začíná a končí.

Struktury auto-default (auto-default structs)

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 (typu struct) 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 vzoru Span<char> a ReadOnlySpan<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é jsou Span<char> nebo ReadOnlySpan<char>.

Rozšířená podpora nameof

K dispozici od Visual Studia 2022 verze 17.3. Operátor nameof nově vyhodnocuje názvy parametrů a názvy parametrů typu v deklaraci atributu dané metody. Operátor nameof 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.

Řetězcové literály UTF-8

Nově je možné u řetězcového literálu zadat příponu u8 pro určení kódování znaků UTF-8.

Požadovaní členové (required members)

Zaveden je modifikátor required, 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 atribut System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute.

Členské proměnné ref a proměnné ref scoped

Uvnitř struktury ref struct je možné deklarovat členské proměnné ref. U typů jako System.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.

Lokální typy souborů (file-local types)

Verze C# 11 zavádí file, nový modifikátoru přístupu, který omezuje viditelnost na zdrojový soubor, ve kterém je deklarován.

Varovná vlna 7 (Warning wave 7)

K dispozici od Visual Studia 2022 verze 17.2. Jedná se o varování (Warnings) a chyby (Errors) přidané v jazyce C# 11:

Zlepšení serializace System.Text.Json Přizpůsobení kontraktu JSON

Možnost lépe kontrolovat serializaci a deserializaci typu.

Polymorfní serializace

Polymorfní serializace vlastností uživatelsky definované hierarchie typů (odvozených tříd).

Podpora povinných členů

Označení povinných vlastností, které musí být přítomny ve zdroji JSON, aby deserializace proběhla úspěšně.

C Sharp 12

Primární konstruktory

Primární konstruktory (primary constructors).

Výrazy pro kolekce

Výrazy pro kolekce (collection expressions).

Výchozí parametry lambda

Výchozí parametry lambda (default lambda parameters).

Nepovinné parametry ve výrazech lambda

Nepovinné parametry ve výrazech lambda (eptional parameters in lambda expressions).

Alias any type

Alias any type (alias libovolného typu).

Inline arrays

Inline arrays (Inline pole).

Interceptors

Interceptors (Interceptory).

Výběr verze cílového rámce

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.

Výchozí verze cílového rámce (.NET SDK), kterou na základě pravidel určí překladač jazyka C#
.NET Standard Cílový rámec Výchozí verze jazyka C# Roslyn kompilátor Visual Studio
Název Verze
.NET Framework 2.0 – 4.6 C# 6.0 Visual Studio 2015
.NET Framework 4.7 C# 7.0 Visual Studio 2017 verze 15.0
.NET Framework C# 7.1 Visual Studio 2017 verze 15.3
.NET Framework C# 7.2 Visual Studio 2017 verze 15.5
1.0–1.2 .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 C# 7.3 Visual Studio 2017 verze 15.7
1.3–1.6 .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 C# 7.3 Visual Studio 2017
2.0 .NET Framework 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 C# 7.3 Visual Studio 2017
1.0–1.6 .NET Core 1.0.4 C# 7.0 2.0 Visual Studio 2017 RTM
2.1 Visual Studio 2017 verze 15.1
2.2 Visual Studio 2017 verze 15.2
1.1.4 C# 7.1 2.3.2 Visual Studio 2017 verze 15.3
2.4 Visual Studio 2017 verze 15.4
1.0–1.6, 2.0 .NET Core 2.1.2 C# 7.2 2.6.1 Visual Studio 2017 verze 15.5
2.7 Visual Studio 2017 verze 15.6
2.1.200 C# 7.3 2.8.2 Visual Studio 2017 verze 15.7
2.9 Visual Studio 2017 verze 15.8
2.10 Visual Studio 2017 verze 15.9
1.0–1.6, 2.0, 2.1 .NET Core 3.x C# 8.0 3.0 – 3.4 Visual Studio 2019 verze 16.3
.NET 5.x C# 9.0 3.8 Visual Studio 2019 verze 16.8
6.x C# 10 3.9 – 3.10 Visual Studio 2022 verze 17.0

Visual Studio 2022 verze 17.2

.NET 7.x C# 11 4.x Visual Studio 2022
.NET 8.x C# 12 4.8.0 Visual Studio 2022 verze 17.8 (Preview)

„Ahoj, světe!“

Následující jednoduchá konzolové aplikace vypíše „Ahoj, světe!“ na standardní výstup.

using System; namespace MojeKonzolováAplikace { class HlavníTřída { static void Main(string args) { Console.WriteLine("Ahoj, světe!"); } } }

Rozeberme krátce jednotlivé příkazy. Třídy, základní jednotky objektového programování, jsou v C# rozděleny pro lepší orientaci a jednoznačnost názvů do jmenných prostorů. Na počátku zdrojového kódu jmenujeme příkazem using jmenné prostory, jež budeme používat – nebudeme pak muset rozepisovat jejich název, všechny třídy z nich jsou nám hned přístupny.

Na dalším řádku příkazem namespace říkáme, že chceme zařadit kód vymezený následujícími složenými závorkami do jmenného prostoru MojeKonzolová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 s háč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 o statickou metodu nevracející žádnou hodnotu nebo typ int (celé číslo), která buď nepřebírá žádné argumenty, nebo pole řetězců (stringů) a která 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) a pak 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řídy Console (sídlí ve jmenném prostoru System) jménem WriteLine, která za argument pojímá jedinou proměnnou typu string, kterou vypíše uživateli do konzole. Řetězce se ohraničují počítačovými uvozovkami.

Vývojová prostředí

XML Dokumentace

Systém dokumentace kódu je podobný JavaDoc, používanému v jazyce Java. Významným rozdílem je ale to, že je založen na XML. Následující příkaz ukazuje komentář k metodě.

public class Foo { /// <summary>Popis metody.</summary> /// <param name="firstParam">Popis parametru metody</param> /// <returns>Popis návratové hodnoty metody</returns> public static bool Bar(int firstParam) {} }

Jak vidíme, každý řádek komentáře musí začínat řetězcem "///". Tyto komentáře často používají nástroje jako IntelliSense integrovaný v Microsoft Visual Studiu, který programátorovi při psaní kódu napovídá.

Název jazyka

Název jazyka C# je odvozen z hudební notace, kde křížek označuje zvýšení noty o půl tónu a v tomto případě by označoval notu cis, tedy C zvýšené o půl tónu. Podobně vznikl název jazyka C++ jako zlepšení jazyka C: „++“ totiž v syntaxi jazyka C znamená zvýšení hodnoty proměnné o 1.

Křížek na počítačové klávesnici (#) a křížek v hudební nauce (♯) jsou dva odlišné znaky. Pro zápis názvu jazyka C Sharp se nepoužívá znak hudebního křížku z technický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 v případech jako jsou různé marketingové materiály se často používá znak křížku z hudební notace.

Odkazy

Poznámky

  1. Dokument specifikace Microsoft C# 2.0 obsahuje pouze nové funkce verze 2.0. Pro starší funkce použijte výše uvedenou specifikaci 1.2.

Reference

V tomto článku byl použit překlad textu z článku C Sharp (programming language) na anglické Wikipedii.

  1. Standard C#
  2. Microsoft .NET and .NET Core - Microsoft Lifecycle. docs.microsoft.com . Microsoft . Dostupné online. (anglicky) 
  3. ECMA-334 . ECMA, 2022-06 . Dostupné online. (anglicky) 
  4. What's new in the C# 2.0 Language and Compiler . Microsoft . Dostupné v archivu pořízeném z originálu dne December 18, 2010. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  5. HEJLSBERG, Anders; TORGERSEN, Mads. Overview of C# 3.0 . Microsoft . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  6. Using C# 3.0 from .NET 2.0 . Danielmoth.com, May 13, 2007 . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  7. Using C# 3.0 from .NET 2.0 . Danielmoth.com, May 13, 2007 . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  8. HEJLSBERG, Anders. Future directions for C# and Visual Basic . Microsoft . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  9. An Introduction to New Features in C# 5.0 . Microsoft . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  10. Language feature implementation status . Microsoft . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  11. What's new in C# 7 . 2016-12-21. Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  12. New Features in C# 7.0 . March 9, 2017 . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  13. What's new in C# 7.1 . . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  14. Visual Studio 2017 15.3 Release Notes . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  15. What's new in C# 7.2 . . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  16. a b Visual Studio 2017 15.9 Release Notes . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  17. What's new in C# 7.3 . . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  18. What's new in C# 8.0 . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  19. What's new in .NET Core 3.0. docs.microsoft.com . Microsoft, 2022-06-29 . Dostupné online. (anglicky) 
  20. What's new in .NET Core 3.1. docs.microsoft.com . Microsoft, 2022-07-12 . Dostupné online. (anglicky) 
  21. BILLWAGNER. What's new in C# 9.0 - C# Guide . . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  22. Visual Studio 2019 16.8 Release Notes . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  23. What's new in C# 10 . . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  24. Visual Studio 2022 version 17.0 Release Notes . Dostupné online. (anglicky) Je zde použita šablona {{Cite web}} označená jako k „pouze dočasnému použití“.
  25. a b c .NET Downloads (Linux, macOS, and Windows). Microsoft . . Dostupné online. (anglicky) 
  26. What's new in C# 11 - C# Guide. docs.microsoft.com . Microsoft, 2022-07-09 . Dostupné online. (anglicky) 
  27. Download .NET 7.0 (Linux, macOS, and Windows). Microsoft . . Dostupné online. (anglicky) 
  28. BILLWAGNER. What's new in C# 12:Get an overview of the new features in C# 12. learn.microsoft.com . Microsoft, 2023-08-18 . Dostupné online. (anglicky) 
  29. GEWARREN. Novinky v .NET 8. learn.microsoft.com . 2023-10-07 . Dostupné online
  30. a b VEDHAR. Zpráva k vydání verze Visual Studio 2022 Preview. learn.microsoft.com . 2023-10-11 . Dostupné online
  31. Anonymous Methods (C#)
  32. ?? Operator (C# Reference) . Microsoft . Dostupné online
  33. What's New for Visual C# in Visual Studio 2012 . Microsoft Developer Network . Dostupné online
  34. a b c d e DIETRICH, Erik; SMACCHIA, Patrick. The history of C# - C# Guide. docs.microsoft.com . Microsoft, 2022-06-16 . Článek byl původně publikován na blogu NDepend. Dostupné online. (anglicky) 
  35. BILLWAGNER. What's new in C# 11 - C# Guide. docs.microsoft.com . . Dostupné online. (anglicky) 
  36. What's new in .NET 7. learn.microsoft.com . Microsoft, 2023-01-10 . Dostupné online. (anglicky) 
  37. Numeric IntPtr - C# 11.0 draft specifications. learn.microsoft.com . Microsoft, 2022-09-29 . Dostupné online. (anglicky) 
  38. C# Compiler warning waves. learn.microsoft.com . 2022-09-29 . Dostupné online. (anglicky) 
  39. a b BILLWAGNER. C# language versioning - C# Guide. docs.microsoft.com . . Dostupné online. (anglicky) 
  40. C# 10 and .NET 6 – Modern Cross-Platform Development - Sixth Edition. www.packtpub.com . Packt, 2021-12 . Dostupné online. (anglicky) 
  41. Supported Roslyn package version mappings - Visual Studio (Windows). docs.microsoft.com . Microsoft, 2022-04-30 . Dostupné online. (anglicky) 
  42. GEWARREN. .NET Standard. docs.microsoft.com . Microsoft, 2022-01-26 . Dostupné online. (anglicky) 
  43. LANDER, Richard. Announcing .NET 6 -- The Fastest .NET Yet. .NET Blog . 2021-11-08 . Dostupné online. (anglicky) 
  44. VEDHAR. Visual Studio 2022 version 17.2 Release Notes. docs.microsoft.com . . Dostupné online. (anglicky) 
  45. MAIAK. Podporovaná mapování verzí balíčků Roslyn - Visual Studio (Windows). learn.microsoft.com . 2023-08-25 . Dostupné online

Související články

Externí odkazy