C Sharp
| Správny názov tohto článku je C#. Vynechanie # je spôsobené technickými obmedzeniami. |
| C# | |
| | |
| Druh | objektový, štruktúrovaný, imperatívny |
|---|---|
| Dátum vzniku | 2000[1] |
| Použitie | všeobecné |
| Typová kontrola | silná |
| Tvorca | Microsoft |
| Implementácie | .NET, .NET Framework, Mono |
| Používané prípony | .cs,.csproj,.sln |
C# (v angličtine c sharp - vysl. sí šarp) je objektovo-orientovaný programovací jazyk vyvinutý spoločnosťou Microsoft ako časť ich iniciatívy .NET.[1] Microsoft si za základ pre nový jazyk C# zobral C++ a jazyk Java. C# bolo navrhované s úmyslom vyvážiť silu jazyka C++ a tú spojiť s možnosťou rýchleho programovania "rapid application development", ktoré ponúkali jazyky ako napríklad Visual Basic, Delphi.[1] Hlavnými autormi jazyka boli Anders Hejlsberg, Scott Wiltamuth a Peter Golde; prvú široko rozšírenú implementáciu vydal Microsoft v júli 2000.[1] Jazyk je štandardizovaný ako norma ECMA-334 organizácie Ecma International (prvé vydanie v decembri 2001) a ako medzinárodná norma ISO/IEC 23270 (2003), od verzie 7 ISO/IEC 20619.[2] Posledná stabilná verzia jazyka C# je 14, vydaná v novembri 2025 spolu s platformou .NET 10 (stav k októbru 2026); vo verzii preview je k dispozícii C# 15 pre pripravovanú platformu .NET 11.[3][4][5]
Tento článok popisuje jazyk tak, ako je definovaný v štandardoch ISO a ECMA, pričom nepopisuje detaily implementácie firmou Microsoft. Pre popis implementácie jazyka firmou Microsoft si pozrite heslo Microsoft Visual C#.
Ciele pri tvorbe jazyka
[upraviť | upraviť zdroj]V štandarde ECMA boli kladené nasledovné ciele pri tvorbe jazyka C#:[1]
- C# bol vytváraný tak, aby bol jednoduchým, moderným, objektovo orientovaným jazykom pre všeobecné použitie.
- Jazyk a jeho implementácie by mali poskytovať podporu pre nasledovné princípy softvérového inžinierstva ako silná typová kontrola, kontrola ohraničenia polí, detekciu pokusov na využitie neinicializovaných premenných a automatickú správu pamäte. Dôležitými vlastnosťami je tiež robustnosť, odolnosť a produktivita.
- Jazyk je tvorený so zreteľom na vývoj softvérových komponentov, ktoré sú vhodné pre nasadenie v distribuovaných prostrediach.
- Prenositeľnosť zdrojového kódu je mimoriadne dôležitá, rovnako ako aj prenositeľnosť znalostí programátorov so skúsenosťami s jazykmi C a C++.
- Lokalizácia a internacionalizácia je mimoriadne dôležitá.
- C# je jazyk zameraný na tvorbu aplikácií pre hostované, ako aj embedded systémy s ohľadom na veľkú škálovateľnosť od veľmi veľkých systémov používajúcich sofistikované operačné systémy po veľmi malé zariadenia pre špecializované úlohy.
- Aj keď je jazyk C# plánovaný na ekonomické využívanie pamäte a procesorového času, nie je kompletne zameraný na výkonnosť a veľkosť výsledného binárneho kódu ako jazyky C alebo assembler.
História architektúry
[upraviť | upraviť zdroj]Tvorca princípov a hlavný architekt jazyka C# je Anders Hejlsberg.[1][6]:1 Jeho predchádzajúce skúsenosti s programovacími jazykmi a dizajnom frameworkov (Visual J++, Borland Delphi, Turbo Pascal) sú ľahko rozpoznateľné v syntaxi jazyka, rovnako ako aj v CLR (Common Language Runtime).[6]:2 Podľa Hejlsberga nebolo hlavnou motiváciou pre CLR odstránenie nedostatkov iných jazykov, ale snaha vytvoriť jednotnú modernú vývojovú platformu pre viaceré programovacie jazyky a aplikačné modely.[6]:1 Niektoré korene a princípy samozrejme pochádzajú aj z iných programovacích jazykov.
Počas vývoja platformy .NET Framework boli jej triedne knižnice pôvodne napísané v jazyku Simple Managed C (SMC), ktorý si vytvoril tím vývojárov behového prostredia CLR.[7] Nový jazyk mal počas vývoja kódové označenie Cool (z angl. C-like Object Oriented Language); Microsoft zvažoval ponechať ho aj ako konečný názov, z dôvodov ochranných známok to však nebolo možné.[6]:2 Verejne bol jazyk spolu s platformou .NET predstavený v júli 2000 a v septembri 2000 vznikla v rámci organizácie Ecma International pracovná skupina, ktorá pripravila jeho štandard.[1][7]
James Gosling, autor jazyka Java, označil C# za napodobeninu Javy a povedal, že je to „niečo ako Java, z ktorej odstránili spoľahlivosť, produktivitu a bezpečnosť“.[8] Podobne sa vyjadril aj Bill Joy, spoluzakladateľ spoločnosti Sun Microsystems, podľa ktorého forma špecifikácie C# napodobňuje špecifikáciu jazyka Java.[9] Hejlsberg v auguste 2000 odmietol, že by C# bol klonom Javy, a uviedol, že jazyk má svojím návrhom oveľa bližšie k C++, z ktorého preberá väčšinu operátorov, kľúčových slov a príkazov.[10]
Od verzie C# 2.0 z novembra 2005 sa C# a Java vyvíjajú stále odlišnejšími smermi. Jedným z prvých veľkých rozdielov bolo zavedenie generických typov: v C# si na rozdiel od Javy zachovávajú úplnú typovú informáciu aj za behu programu, bez vymazávania typov (type erasure).[3][11] Verzia 3.0 (2007) priniesla jazykovo integrované dopyty LINQ a s nimi lambda výrazy, rozširujúce metódy a anonymné typy a položila základy toho, aby sa C# stal hybridným objektovo orientovaným a funkcionálnym jazykom.[3][12] S verziou 6.0 (2015) vydal Microsoft kompilátor Roslyn, napísaný v samotnom jazyku C#; verzia 8.0 (2019) bola prvou veľkou verziou zameranou výslovne na multiplatformovú platformu .NET Core.[3]
Návrh štandardu predložili spoločnosti Hewlett-Packard, Intel a Microsoft.[1] Norma ECMA-334 vyšla v siedmich vydaniach (december 2001 až december 2023); verzie jazyka 1, 2 a 5 prijala organizácia ISO/IEC ako normu ISO/IEC 23270 (2003, 2006 a 2018) a verziu 7 ako ISO/IEC 20619:2023. Verzie 3 a 4 nemajú zodpovedajúcu normu Ecma ani ISO.[2]
Názov
[upraviť | upraviť zdroj]Microsoft použil názov C# už v roku 1988 pre variant jazyka C určený na inkrementálnu kompiláciu; tento projekt bol po niekoľkých mesiacoch zrušený.[13] Názov jazyka je inšpirovaný hudbou: krížik (♯) v notovom zápise zvyšuje tón o poltón.[14][6]:2 Podľa Hejlsberga je v ňom zároveň slovná hračka s jazykom C++ – krížik možno vidieť ako štyri znaky plus, teda „C++++“.[6]:2 Keďže znak krížika nie je na bežnej klávesnici, v názve sa namiesto neho používa znak # (number sign), ako to predpisuje aj norma ECMA-334: názov sa píše ako veľké latinské písmeno C (U+0043), za ktorým nasleduje znak # (U+0023), a vyslovuje sa „C Sharp“.[15][1]
Verzie
[upraviť | upraviť zdroj]Verziou 10 prešiel jazyk C# na ročný cyklus vydávania spolu s platformou .NET; od verzie 9 vychádzajú nové verzie každoročne v novembri.[3]
| Verzia | Vydanie | Vydaná spolu s | Vybrané novinky |
|---|---|---|---|
| 1.0 | január 2002 | Visual Studio .NET 2002 | triedy, štruktúry, rozhrania, udalosti, vlastnosti, delegáty, atribúty |
| 1.2 | apríl 2003 | Visual Studio .NET 2003 | cyklus foreach volá Dispose |
| 2.0 | november 2005 | Visual Studio 2005 | generické typy, čiastočné typy, anonymné metódy, nullovateľné hodnotové typy, iterátory |
| 3.0 | november 2007 | Visual Studio 2008, .NET Framework 3.5 | LINQ, lambda výrazy, rozširujúce metódy, anonymné typy, implicitne typované lokálne premenné (var), stromy výrazov |
| 4.0 | apríl 2010 | Visual Studio 2010 | dynamické viazanie (dynamic), pomenované a voliteľné argumenty, kovariancia a kontravariancia generických typov |
| 5.0 | august 2012 | Visual Studio 2012 | asynchrónne programovanie (async/await), atribúty s informáciami o volajúcom |
| 6.0 | júl 2015 | Visual Studio 2015 | interpolácia reťazcov, operátor nameof, null-podmienený operátor, filtre výnimiek, statické importy |
| 7.0 | marec 2017 | Visual Studio 2017 | n-tice a dekonštrukcia, porovnávanie vzorov, lokálne funkcie, premenné out, návratové hodnoty ref |
| 7.1 | august 2017 | Visual Studio 2017 verzia 15.3[16] | asynchrónna metóda Main, literál default |
| 7.2 | november 2017 | – | readonly struct, parametre in, typy ref struct |
| 7.3 | máj 2018 | Visual Studio 2017 verzia 15.7[17] | výkonnosť bezpečného kódu, porovnávanie n-tíc pomocou == a != |
| 8.0 | september 2019 | .NET Core 3.0[18] | nullovateľné referenčné typy, asynchrónne prúdy, výrazy switch, predvolené členy rozhraní, indexy a rozsahy |
| 9 | november 2020 | .NET 5 | záznamy (record), vlastnosti len na inicializáciu (init), príkazy najvyššej úrovne, nové vzory |
| 10 | november 2021 | .NET 6[19] | záznamové štruktúry, globálne direktívy using, deklarácia menného priestoru pre celý súbor |
| 11 | november 2022 | .NET 7, Visual Studio 2022 verzia 17.4[20] | surové reťazcové literály, generická matematika, vzory zoznamov, povinné členy |
| 12 | november 2023 | .NET 8[21] | primárne konštruktory, výrazy kolekcií, alias ľubovoľného typu |
| 13 | november 2024 | .NET 9[22] | kolekcie params, nový typ zámku System.Threading.Lock, escape sekvencia \e |
| 14 | november 2025 | .NET 10, Visual Studio 2026[4] | rozširujúce členy, null-podmienené priradenie, vlastnosti s kľúčovým slovom field |
| 15 | preview (2026) | .NET 11 (preview)[5] | zjednocovacie typy (union types), argumenty výrazov kolekcií |
Vlastnosti jazyka
[upraviť | upraviť zdroj]C# ako programovací jazyk v niektorých ohľadoch priamo odráža vlastnosti vrstvy CLI (Common Language Infrastructure), ktorá leží pod ním. Tento jazyk bol priamo navrhnutý tak, aby umožňoval využitie všetkých vlastností, ktoré poskytuje CLI, na rozdiel od jazykov, ktoré majú vlastnú syntax a využívajú len podmnožinu vlastností CLI (ako napríklad Visual Basic). Väčšina typov zavedených v jazyku C# priamo korešponduje s hodnotovými typmi implementovanými v CLI frameworku, špecifikácia jazyka C# však neurčuje podmienky, ktorými sa má generovanať kód z kompilátora. To znamená, že kompilátor jazyka C# nemusí mať za cieľovú podpornú platformu priamo CLI, respektíve vôbec nemusí generovať medziprekladový jazyk MSIL (Microsoft Intermediate Language, dnes CIL), ani žiaden iný formát.[2] Teoreticky je možné vytvoriť kompilátor jazyka C#, ktorý bude prekladať priamo do strojového kódu ako tradičné kompilátory jazyka C++, Fortran a podobne. V praxi to umožňuje napríklad technológia Native AOT platformy .NET, ktorá aplikáciu vopred (ahead-of-time) preloží do natívneho kódu.[23]
Pri porovnaní s jazykmi C a C++ došlo k rôznym obmedzeniam a rozšíreniam, z ktorých sú najvýraznejšie tieto:
- Neexistujú globálne premenné. Všetky metódy a atribúty musia patriť niektorej triede, podobne ako v iných objektovo-orientovaných jazykoch.
- Na rozdiel od C a C++ sa názvy premenných nesmú v uzatváracích blokoch opakovať, čo vedie k zlepšeniu čitateľnosti kódu a zamedzuje nejednoznačnostiam a zmiatnutiu pri čítaní zdrojového kódu.
- Namiesto globálnych funkcií ako napríklad
printf()v jazyku C musia byť všetky metódy deklarované s príslušnosťou k triede. Triedy sú v drvivej väčšine organizované do menných priestorov (namespace)
Spoločný typový systém
[upraviť | upraviť zdroj]C# má jednotný typový systém, nazývaný Common Type System (CTS): každý typ, vrátane primitívnych typov, ako sú celé čísla, je priamo alebo nepriamo odvodený od triedy object (System.Object), ktorá je spoločnou základnou triedou všetkých typov.[24] Typy sa delia na dve hlavné skupiny – hodnotové a referenčné. Premenná hodnotového typu (napríklad vstavané číselné typy, štruktúry struct a výčty enum) priamo obsahuje svoje dáta, kým premenná referenčného typu (napríklad triedy, polia a reťazce) uchováva iba odkaz na objekt, takže na ten istý objekt môže odkazovať viac premenných.[24] Hodnoty hodnotových typov sa dajú používať ako objekty vďaka operáciám boxing (zabalenie hodnoty do objektu) a unboxing (jej vybalenie, ktoré vyžaduje explicitné pretypovanie).[24]
int a = 42; // hodnotový typ
object b = a; // boxing
int c = (int)b; // unboxing
Ukážky z kódu
[upraviť | upraviť zdroj]Hello world
[upraviť | upraviť zdroj]Klasický program „Hello, World!“ má v jazyku C# podobu:[1]
using System;
class Ahoj
{
static void Main()
{
Console.WriteLine("Ahoj, svet!");
}
}
Od verzie C# 9 nie je potrebné deklarovať menný priestor, triedu ani metódu Main – príkazy možno napísať priamo na najvyššej úrovni súboru:[3]
Console.WriteLine("Ahoj, svet!");
Poznámky
[upraviť | upraviť zdroj]C# používa dvojitú lomku (//) na označenie komentáru.
public class Ahoj
{
// komentár
public static void Svet(int firstParam) {} //Iný komentár
}
Na viacriadkový komentár sa používa lomka s hviezdičkou (/* pre začiatok, */ pre ukončenie)
public class Ahoj {
public static void Main () {
/* toto
je viacriadkový
komentár*/
Console.WriteLine("Ahoj!");
}
}
Príklad
[upraviť | upraviť zdroj] public class Pole {
public static void Main () {
int[] numbers = {5, 6, 1, -2, 0};
foreach (int i in numbers) {
System.Console.WriteLine(i);
}
}
}
Programovací jazyk C# je objektovo orientovaný a zdrojový kód sa člení do tried. Názvy tried by mali korešpondovať s ich funkcionalitou. Tento program je tvorený triedou Pole, ktorá obsahuje funkciu main. Vo funkcii main sa vytvára pole o veľkosti 5 prvkov. Následne sú hodnoty jednotlivých prvkov poľa vypísané na štandardný výstup.
Výstup programu:
5
6
1
-2
0
Rozdiely oproti C++
[upraviť | upraviť zdroj]- Automatické uvoľnenie pamäte pri dátových typoch
- Trieda sa dá odvodiť len od jednej triedy, ostatné sa dajú len implementovať ako rozhrania
- Vlastnosti sa dajú definovať automaticky ako v príklade
...
public long ValidValue
{
get
{
return nacitajHodnotuDynamicky();
}
set
{
if(value>0 && value<50)
{
nastavHodnotu(value);
}
}
}
...
obj.ValidValue = 5;
...
- Baltie - programovacie prostredie C# pre deti Baltie Archivované 2007-05-16 na Wayback Machine
Implementácie
[upraviť | upraviť zdroj]Referenčný kompilátor jazyka C# Roslyn je otvorená implementácia kompilátorov jazykov C# a Visual Basic, ktorú Microsoft vydáva pod licenciou MIT.[25] Roslyn prekladá zdrojový kód do medzijazyka CIL (Common Intermediate Language); pri spustení programu ho kompilátor typu just-in-time (v súčasnej platforme .NET kompilátor RyuJIT) preloží do strojového kódu daného procesora.[26][27] Herný engine Godot dostal v roku 2017 od Microsoftu dar 24 000 USD na podporu jazyka C# ako skriptovacieho jazyka.[28]
Referencie
[upraviť | upraviť zdroj]- 1 2 3 4 5 6 7 8 9 10 Standard ECMA-334: C# Language Specification (4th edition) [online]. Ecma International, 2006-06, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 ECMA-334: C# language specification [online]. Ecma International, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- 1 2 3 4 5 6 7 The history of C# [online]. Microsoft, 2025-11-18, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 What's new in C# 14 [online]. Microsoft, 2025-11-18, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 What's new in C# 15 [online]. Microsoft, 2026-09-11, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 4 5 6 HAMILTON, Naomi. The A-Z of Programming Languages: C# [online]. Computerworld, 2008-10-01, [cit. 2026-10-04]. Dostupné online. Archivované 2019-05-18 z originálu. (po anglicky)
- 1 2 ZANDER, Jason. Couple of Historical Facts [online]. Microsoft, 2007-11-21, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ Why Microsoft's C# isn't [online]. CNET, 2002, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ JOY, Bill. Microsoft's blind spot [online]. CNET, 2002-02-07, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ OSBORN, John. Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg [online]. O'Reilly Media, 2000-08-01, [cit. 2026-10-04]. Dostupné online. Archivované 2010-01-09 z originálu. (po anglicky)
- ↑ Generics (C# Programming Guide) [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ BOX, Don; HEJLSBERG, Anders. LINQ: .NET Language-Integrated Query [online]. Microsoft, 2007-02, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ MARIANI, Rico. My History of Visual Studio (Part 1) [online]. Microsoft, 2009-10-05, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ KOVACS, James. C#/.NET History Lesson [online]. 2007-09-07, [cit. 2026-10-04]. Dostupné online. Archivované 2009-03-06 z originálu. (po anglicky)
- ↑ Microsoft C# FAQ [online]. Microsoft, [cit. 2026-10-04]. Dostupné online. Archivované 2006-02-14 z originálu. (po anglicky)
- ↑ Visual Studio 2017 version 15.3 Release Notes [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ Visual Studio 2017 version 15.7 Release Notes [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ What's new in .NET Core 3.0 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ LANDER, Richard. Announcing .NET 6 – The Fastest .NET Yet [online]. Microsoft, 2021-11-08, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ What's new in .NET 7 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ What's new in C# 12 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ What's new in C# 13 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ Native AOT deployment overview [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- 1 2 3 Types – C# language specification [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ dotnet/roslyn: The .NET Compiler Platform [online]. GitHub, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ Managed execution process [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ FORSTALL, Bruce. The RyuJIT transition is complete! [online]. Microsoft, 2018-06-19, [cit. 2026-10-03]. Dostupné online. (po anglicky)
- ↑ ETCHEVERRY, Ignacio. Introducing C# in Godot [online]. Godot Engine, 2017-10-21, [cit. 2026-10-03]. Dostupné online. (po anglicky)
Iné projekty
[upraviť | upraviť zdroj]
Commons ponúka multimediálne súbory na tému C Sharp
Externé odkazy
[upraviť | upraviť zdroj]- C# Guide – oficiálna dokumentácia jazyka (Microsoft Learn) (po anglicky)
- ECMA-334: C# language specification (po anglicky)
- Zdrojový kód kompilátora Roslyn na GitHube (po anglicky)
Zdroj
[upraviť | upraviť zdroj]Tento článok je čiastočný alebo úplný preklad článkov C Sharp (programming language) na anglickej Wikipédii a C Sharp na českej Wikipédii.