Preskočiť na obsah

C Sharp

z Wikipédie, slobodnej encyklopédie
Správny názov tohto článku je C#. Vynechanie # je spôsobené technickými obmedzeniami.
C#

Druhobjektový, štruktúrovaný, imperatívny
Dátum vzniku2000[1]
Použitievšeobecné
Typová kontrolasilná
TvorcaMicrosoft
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]

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]

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]

Verzie jazyka C#[3]
VerziaVydanieVydaná spolu sVybrané novinky
1.0január 2002Visual Studio .NET 2002triedy, štruktúry, rozhrania, udalosti, vlastnosti, delegáty, atribúty
1.2apríl 2003Visual Studio .NET 2003cyklus foreach volá Dispose
2.0november 2005Visual Studio 2005generické typy, čiastočné typy, anonymné metódy, nullovateľné hodnotové typy, iterátory
3.0november 2007Visual Studio 2008, .NET Framework 3.5LINQ, lambda výrazy, rozširujúce metódy, anonymné typy, implicitne typované lokálne premenné (var), stromy výrazov
4.0apríl 2010Visual Studio 2010dynamické viazanie (dynamic), pomenované a voliteľné argumenty, kovariancia a kontravariancia generických typov
5.0august 2012Visual Studio 2012asynchrónne programovanie (async/await), atribúty s informáciami o volajúcom
6.0júl 2015Visual Studio 2015interpolácia reťazcov, operátor nameof, null-podmienený operátor, filtre výnimiek, statické importy
7.0marec 2017Visual Studio 2017n-tice a dekonštrukcia, porovnávanie vzorov, lokálne funkcie, premenné out, návratové hodnoty ref
7.1august 2017Visual Studio 2017 verzia 15.3[16]asynchrónna metóda Main, literál default
7.2november 2017–readonly struct, parametre in, typy ref struct
7.3máj 2018Visual Studio 2017 verzia 15.7[17]výkonnosť bezpečného kódu, porovnávanie n-tíc pomocou == a !=
8.0september 2019.NET Core 3.0[18]nullovateľné referenčné typy, asynchrónne prúdy, výrazy switch, predvolené členy rozhraní, indexy a rozsahy
9november 2020.NET 5záznamy (record), vlastnosti len na inicializáciu (init), príkazy najvyššej úrovne, nové vzory
10november 2021.NET 6[19]záznamové štruktúry, globálne direktívy using, deklarácia menného priestoru pre celý súbor
11november 2022.NET 7, Visual Studio 2022 verzia 17.4[20]surové reťazcové literály, generická matematika, vzory zoznamov, povinné členy
12november 2023.NET 8[21]primárne konštruktory, výrazy kolekcií, alias ľubovoľného typu
13november 2024.NET 9[22]kolekcie params, nový typ zámku System.Threading.Lock, escape sekvencia \e
14november 2025.NET 10, Visual Studio 2026[4]rozširujúce členy, null-podmienené priradenie, vlastnosti s kľúčovým slovom field
15preview (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!");

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!");
       }
 }
 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;

...

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. 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)
  2. 1 2 3 ECMA-334: C# language specification [online]. Ecma International, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  3. 1 2 3 4 5 6 7 The history of C# [online]. Microsoft, 2025-11-18, [cit. 2026-10-04]. Dostupné online. (po anglicky)
  4. 1 2 What's new in C# 14 [online]. Microsoft, 2025-11-18, [cit. 2026-10-04]. Dostupné online. (po anglicky)
  5. 1 2 What's new in C# 15 [online]. Microsoft, 2026-09-11, [cit. 2026-10-04]. Dostupné online. (po anglicky)
  6. 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)
  7. 1 2 ZANDER, Jason. Couple of Historical Facts [online]. Microsoft, 2007-11-21, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  8. ↑ Why Microsoft's C# isn't [online]. CNET, 2002, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  9. ↑ JOY, Bill. Microsoft's blind spot [online]. CNET, 2002-02-07, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  10. ↑ 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)
  11. ↑ Generics (C# Programming Guide) [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  12. ↑ BOX, Don; HEJLSBERG, Anders. LINQ: .NET Language-Integrated Query [online]. Microsoft, 2007-02, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  13. ↑ MARIANI, Rico. My History of Visual Studio (Part 1) [online]. Microsoft, 2009-10-05, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  14. ↑ 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)
  15. ↑ Microsoft C# FAQ [online]. Microsoft, [cit. 2026-10-04]. Dostupné online. Archivované 2006-02-14 z originálu. (po anglicky)
  16. ↑ Visual Studio 2017 version 15.3 Release Notes [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  17. ↑ Visual Studio 2017 version 15.7 Release Notes [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  18. ↑ What's new in .NET Core 3.0 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  19. ↑ LANDER, Richard. Announcing .NET 6 – The Fastest .NET Yet [online]. Microsoft, 2021-11-08, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  20. ↑ What's new in .NET 7 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  21. ↑ What's new in C# 12 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  22. ↑ What's new in C# 13 [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  23. ↑ Native AOT deployment overview [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  24. 1 2 3 Types – C# language specification [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  25. ↑ dotnet/roslyn: The .NET Compiler Platform [online]. GitHub, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  26. ↑ Managed execution process [online]. Microsoft, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  27. ↑ FORSTALL, Bruce. The RyuJIT transition is complete! [online]. Microsoft, 2018-06-19, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  28. ↑ 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]
  • Spolupracuj na Commons Commons ponúka multimediálne súbory na tému C Sharp

Externé odkazy

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