JAZYK C# ÚVOD. Literatura. Jazyk C# .NET Framework



Podobné dokumenty
Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

NPRG031 Programování II --- 2/2 Z, Zk

Zápis programu v jazyce C#

PREPROCESOR POKRAČOVÁNÍ

Programovací jazyk Úvod do programování v C#

Programovací jazyk C# Úvod do programování v C#

Programovací jazyk C# Úvod do programování v C#

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

PŘETĚŽOVÁNÍ OPERÁTORŮ

URČITÝM ZPŮSOBEM PODOBNÉ

Objektově orientované programování

Paměť počítače. alg2 1

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

NPRG031 Programování II 1 / :47:55

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Jazyk C# přednáška 01. Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015

8 Třídy, objekty, metody, předávání argumentů metod

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Ukazka knihy z internetoveho knihkupectvi

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Úvod Vývojová prostředí Štábní kultura Dokumentace Konec. Programování v C# Prostředí a doporučení 1 / 39

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

7. Datové typy v Javě

DATOVÉ TYPY POKRAČOVÁNÍ

11. Přehled prog. jazyků

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Algoritmizace a programování

Opakování programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Seminář Java II p.1/43

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Jazyk C# (seminář 6)

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

3 KTE / ZPE Informační technologie

Algoritmizace a programování

Seznámení s prostředím dot.net Framework

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Algoritmizace a programování

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Generické programování

Programování v C++ 3, 3. cvičení

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Základy programování (IZP)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Algoritmizace. Cíle předmětu

1. Programování proti rozhraní

Úvod do programování. Lekce 1

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

ADT/ADS = abstraktní datové typy / struktury

Datové typy strana 29

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

Programování v C++ 2, 4. cvičení

Programovací jazyk Pascal

Struktura programu v době běhu

Úvod do programovacích jazyků (Java)

Jazyk C# a platforma.net

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Komponenty v.net. Obsah přednášky

5 Přehled operátorů, příkazy, přetypování

přetížení operátorů (o)

Algoritmizace a programování

Úvod do programování - Java. Cvičení č.4

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Jazyk PL/SQL Úvod, blok

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Jazyk C++ I. Šablony 2

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Jazyk C++ I. Šablony

Úvod do programování v jazyce Java

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Platforma.NET 4. hodina dnes to bude ideologické

Jazyk C++ II. Šablony a implementace

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Úvod do programování - Java

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

PB161 Programování v jazyce C++ Přednáška 10

Transkript:

JAZYK C# ÚVOD Literatura 1. VIRIUS, M. Od C++ k C#. České Budějovice: KOPP, 2002. 235 s. Cena 199 Kč. ISBN 80-7232-176-5. 2. NAGEL CH. et al. C# 2005. Programujeme profesionálně. Brno: Computer Press, 2007. 1400 s. Cena 1390 Kč. ISBN 80-251-1181-4. 3. TROELSEN, A. C# a.net 2.0 profesionálně. Brno: Zoner Press, 2007. 1376 s. Cena 950 Kč. ISBN 80-86815-38-2. 4. ECMA-334. The C# Language Specification [online]. 4 th edition, June 2006. URL: <http://www.ecma-international.org/publications/standards/ecma-334.htm> [citováno 2007-02-19]. Jazyk C# Čistě objektový jazyk. Navržený firmou Microsoft. Zveřejněný v roce 2000. Programy určené pro platformu.net..net Framework Nadstavba operačního systému. Zkvalitňuje služby OS a zvyšuje jeho bezpečnost. Základem je společný běhový systém (Common Language Runtime CLR). Umožňuje běh a vzájemnou spolupráci aplikaci napsaných v různých programovacích jazycích. Součásti CLR: Společná specifikace jazyka (Common Language Specification CLS) pravidla pro tvorbu překladačů jakéhokoli jazyka určeného pro prostředí.net Framework. Společný typový systém (Common Type System CTS) pravidla pro definici datových typů a zacházení s nimi. Automatická správa paměti (Garbage Collector) provádí dealokaci objektů, na které již neexistuje žádný odkaz. Dealokace se nemusí provést ihned po zrušení odkazu na objekt. Programy se nepřekládají do strojového kódu, ale do mezijazyka (Intermediate Language IL, někdy Common IL CIL). Obdoba bajtového kódu jazyka Java. Jazyk IL se ale neinterpretuje, ale na cílovém počítači se překládá do strojového kódu pomocí překladačů JIT (Just In Time). Překladač JIT kompiluje každou z částí programu až v okamžiku jejího volání a výsledný zdrojový kód uloží. Jednou přeložená část programu se při příštím využití znovu do strojového kódu nepřekládá. Překladač JIT provádí optimalizovanou kompilaci využívající plně funkcí konkrétního cílového procesoru. Nad CLR stojí základní knihovna tříd (Basic Class Library BCL) a specializované knihovny. Nejvyšší vrstvu tvoří překladače programovacích jazyků. 1

Programuje se v řízeném kódu (managed code). Programování bez použití.net je v nativním kódu (native code). Řízený kód obsahuje kromě instrukcí IL metadata informace o datových typech v kódu deklarovaných. Jednotka programu vytvořená překladačem (exe, dll) se nazývá sestavení (assembly). Obsahuje řízený kód a manifest sestavení metadata, obsahující informace o aktuální verzi sestavení, informace o využívaných sestaveních, kultuře (jazykové mutaci) aj. Druhy sestavení: soukromé určené pro jednu aplikaci jsou umístěny ve složce aplikace sdílené určené pro více aplikací jsou umístěny v globálním zásobníku sestavení (Global Assembly Cache GAC). V GAC může existovat více stejných sestavení lišících se svou verzí. GAC bývá v adresáři c:\windows\assembly Program ILDASM (Intermediate Langauge Disassembler) slouží pro prohlížení obsahu sestavení. Lze jej spustit pomocí nabídky Start Microsoft.NET Framework SDK v2.0 Tools MSIL Disassembler. Proces aplikace může být tvořen několika aplikačními doménami. Aplikační domény jednoho procesu sdílejí společný virtuální adresový prostor. Předávání dat mezi aplikačními doménami jednoho procesu je výkonnější než předávání dat mezi procesy. Pokud jedna aplikační doména způsobí havárii, ostatní aplikační domény stejného procesu mohou běžet dál. Aplikační domény lze použít např. u serveru, který pro každého klienta má svou vlastní aplikační doménu. Existují i platformy.net pro jiné operační systémy: Projekt Mono www.mono-project.com Projekt Portable.NET www.dotgnu.org. Projekty využívají mj. normu ECMA-335 Common Language Infrastructure (CLI) společná infrastruktura jazyků, která popisuje prostředí.net Framework. První program Následující program je konzolová aplikace, která vypíše na obrazovku dva řádky textu. Program se ukončí stisknutím libovolné klávesy. Příklad using System; namespace PrvniProgram class Program static void Main(string[] args) Console.WriteLine("Toto je můj první program."); Console.WriteLine("Konec programu - libovolná klávesa"); Console.ReadKey(); Komentář Druhy komentářů: jednořádkový začíná znaky // 2

víceřádkový začíná znaky /* a končí znaky */ nelze do sebe vnořovat. dokumentační začíná znaky /// a končí na konci řádku. Dokumentační komentáře Dokumentační komentář obsahuje předdefinované značky jazyka XML, mezi něž patří zejména následující: <summary> souhrnné informace o typu nebo jeho složce. <returns> popis návratové hodnoty metody. <param> popis parametru metody (syntaxi ověřuje překladač). <paramref> odkaz na název parametru metody. <remarks> text poznámky. <value> popis hodnoty vlastnosti třídy (struktury). <see> odkaz na jiný identifikátor (metodu, třídu apod.) (syntaxi ověřuje překladač). <seealso> označuje část Viz také, obsahující odkaz na jiný identifikátor (syntaxi ověřuje překladač). <c> text označený jako kód (klíčové slovo). <code> více řádků označených jako kód. <example> označuje sekci příkladu kódu. <exception> popisuje typ výjimky a stav, kdy může vzniknout. <para> označuje nový odstavec. <list> označuje seznam odrážek. Dokumentační komentář k typu, jeho složce a parametru metody je zobrazován ve vývojovém prostředí při použití daného objektu. Generování XML souboru dokumentačních komentářů menu Project Properties Build, zaškrtávací políčko XML documentation file. Převod XML souboru dokumentačních komentářů do souboru nápovědy program Microsoft Sandcastle konzolová aplikace, volně dostupná složitá obsluha. Pro něj existují různé GUI nadstavby od jiných firem viz http://www.sandcastledocs.com. 3

Příklad /// <summary> /// Třída sloužící jako příklad použití dokumentačních komentářů. /// </summary> /// <remarks> /// Třída obsahuje dvě statické metody: /// <see cref="druhamocnina"/> a <see cref="main"/>. /// </remarks> class Program /// <summary> /// Metoda pro výpočet druhé mocniny čísla typu <c>int</c>. /// </summary> /// <param name="x">umocňované číslo.</param> /// <returns>druhá mocnina parametru <paramref name="x"/>.</returns> static int DruhaMocnina(int x) return x * x; /// <summary> /// Metoda, kterou se začíná běh programu. /// </summary> /// <exception cref="system.io.ioexception"> /// Chyba při výpisu na obrazovku.</exception> static void Main() Console.Write("Druhá mocnina 5 je " + DruhaMocnina(5)); Konvence pojmenování Pascalovský styl (angl. pascal casing) první písmeno každého slova velkým písmenem bez podtržítek, např. DruhaMocnina pro většinu identifikátorů. Velbloudí styl (angl. camel casing) první písmeno malé, druhé a další slovo začíná velkým písmenem, např. druhamocnina. Použít pro následující identifikátory: parametry metod, lokální proměnné, soukromé datové složky třídy. Prostory jmen: hlavní prostor jmen aplikace název společnosti vnořený prostor jmen název technologie (aplikace). Názvy identifikátorů bez prefixu, např. název třídy by neměl být CTrida nebo TTrida, ale jen Trida. Výjimku tvoří interface, který má prefix I, např. IDisposable. Zkratky a akronymy mají být psány malými písmeny, kromě prvního znaku, který závisí na typu identifikátoru (viz výše). Např. htmlcontrol pro soukromé složky resp. HtmlControl pro ostatní složky. Výjimkou jsou dvouznaké zkratky, které by měly být psány velkými písmeny, kromě identifikátorů, které začínají zkratkou a mají být ve velbloudím stylu. Např. veřejná složka DBCommand, soukromá složka dbcommand. Ale v knihovně.net není toto pravidlo dodrženo, např. třída DbConnection. Pravidlo je dodrženo u prostorů jmen a typů, např. prostor jmen System.IO, třída GC. 4

Název výčtového typu: obsahuje příznaky v množném čísle, např. MouseButtons neobsahuje příznaky v jednotném čísle, např. DialogResult. Další informace viz knihovna MSDN, téma Guidelines for Names (naming guidelines) a další témata přednášek. Identifikátory Posloupnost písmen a číslic, začínající písmenem. Za písmeno se považuje jakýkoliv znak v kódování UNICODE. Rozlišují se malá a velká písmena. Před identifikátor lze připojit znak @, který říká, že se jedná o identifikátor. Např. @Číslo a Číslo jsou stejné identifikátory. Znak @ lze použít, pokud jako identifikátor chceme použít klíčové slovo, např. @do je identifikátor, do je klíčové slovo. Klíčová slova Všechna klíčová slova jsou malými písmeny. Seznam viz knihovna MSDN. Deklarace proměnné Neexistují globální proměnné. Syntaxe: deklarace_jedné_proměnné: modifikátory nep typ identifikátor inicializace nep ; Modifikátory const nebo volatile. Typ typ proměnné. Identifikátor jméno proměnné. Inicializace nepovinná inicializační část proměnné dtto C++. Příklady: int i, j = 11, k = 5; const int m = 10, n = 20; // n je také konstanta Rozdíly oproti C++: Modifikátor const lze použít pro předdefinované hodnotové typy (základní datové typy), výčtové typy a typ string. Pro referenční typy (třídy apod.) lze modifikátor const použít pouze k deklaraci proměnné, která je inicializována hodnotou null. Překladač nedovolí použít proměnnou, která nebyla inicializována. Ve vnořeném bloku nelze deklarovat proměnnou stejného jména jako v nadřízeném bloku. Prostory jmen Rozdíly oproti C++: Mezi prostorem jmen a identifikátorem a mezi vnořeným a nadřízeným prostorem jmen se uvádí tečka. Pro složky prostorů jmen lze specifikovat přístupová práva. 5

Syntaxe: deklarace prostoru jmen: namespace jméno direktiva_using nep deklarace_složek Jméno jméno prostoru jmen. Direktiva_using direktiva using viz dále. Deklarace_složek deklarace datových typů (tříd, struktur, výčtových typů aj.) a vnořených prostorů jmen. Vnořený prostor jmen lze deklarovat dvěma způsoby. První způsob: namespace Vnější namespace Vnitřní class X Druhý způsob (neexistuje v C++): namespace Vnější.Vnitřní class X Na identifikátor X se mimo prostor jmen odvoláváme zápisem Vnější.Vnitřní.X v obou uvedených případech deklarace. Identifikátory, které nejsou deklarovány v žádném prostoru jmen, jsou součástí globálního prostoru jmen. Přístupová práva Před deklarací datového typu v prostoru jmen může předcházet specifikace přístupových práv: public datový typ je veřejně přístupný, tj. lze ho použít i v jiných sestaveních, internal datový typ lze použít pouze v sestavení, v němž je deklarován. Neuvede-li se žádná specifikace, překladač doplní specifikaci internal. Direktiva using Existují tři verze deklarace direktivy using. Syntaxe: direktiva_using: using jméno_prostoru_jmen; using alias = jméno_prostoru_jmen; using alias = jméno_typu; Direktiva using musí předcházet všem deklaracím v prostoru jmen. Totéž platí i pro globální prostor jmen. 6

První verze První verze direktivy slouží k specifikaci prostoru jmen, jehož identifikátory se nemusí v programu kvalifikovat jménem tohoto prostoru. Je-li v programu uvedena direktiva using System; lze psát Console.WriteLine("Nějaký text "); protože třída Console je součástí prostoru jmen System. Nelze ale napsat File.Create("data.txt"); ani IO.File.Create("data.txt"); protože třída File leží v prostoru jmen System.IO a ten není direktivou using zpřístupněn. Druhá verze Druhá verze slouží k jinému označení prostoru jmen. Alias nové jméno prostoru jmen. Jméno_prostoru_jmen původní jméno prostoru jmen. Např. pokud se použije tato deklarace using using VV = Vnější.Vnitřní; lze potom přistoupit ke složce X výrazem VV.X. Třetí verze Třetí verze slouží k deklaraci nového jména pro daný typ. V jazyce C/C++ se používá deklarace typedef. Alias nové jméno typu. Jméno_typu původní jméno typu. Např. lze napsat using VVX = Vnější.Vnitřní.X; Nelze však přejmenovat klíčové slovo, např. using cela = int; Lze ale napsat using cela = System.Int32; Typ int je jiné označení pro typ Int32 v prostoru jmen System. 7

Operátor :: Operátor :: (angl. namespace alias qualifier) byl zaveden od verze.net 2.0. Lze jej použít ve spojení s klíčovým slovem global nebo ve spojení s aliasem prostoru jmen deklarovaného pomocí direktivy using. Klíčovým slovem global lze kvalifikovat složku, která je součástí globálního prostoru jmen. Využívá se v případě, kdy složka globálního prostoru jmen je zastíněna stejně pojmenovanou složkou jiného prostoru jmen. Je obdobou unárního rozlišovacího operátoru :: v C++. Příklad namespace GlobalniProstorJmen class System class Program static void Main(string[] args) // System.Console.WriteLine("Text"); // Chyba global::system.console.writeline("text"); global::system.console.readkey(); Pokud je např. deklarován alias SysText pro prostor jmen System.Text using SysText = System.Text; lze dále kvalifikovat třídu StringBuilder tímto aliasem a operátorem :: nebo operátorem tečka SysText::StringBuilder s = new SysText::StringBuilder("text"); SysText.StringBuilder s = new SysText.StringBuilder("text"); 8

DATOVÉ TYPY Jazyk C# rozeznává čtyři druhy datových typů: hodnotové, referenční, ukazatele v nezabezpečeném kódu deklarovaném pomocí klíčového slova unsafe, typový parametr parametr generického typu. Všechny datové typy mají jako svého základního předka třídu object. Hodnotové typy Hodnotové typy jsou: struktury, výčtové typy. Struktury jsou: číselné typy (angl. numeric types): integrální typy (angl. integral types) celá čísla, znaky reálné typy (angl. floating-point types) reálná čísla typ decimal desítková čísla, typ bool logické hodnoty, nulovatelné typy (angl. nullable types) typy, které mohou obsahovat null, uživatelem definované struktury. Celá čísla Jazyk C# obsahuje 8 celočíselných typů. Typ Struktura Velikost [byte] sbyte System.SByte 1 128 až 127 byte System.Byte 1 0 to 255 short System.Int16 2 32,768 až 32,767 ushort System.UInt16 2 0 až 65,535 Rozsah int System.Int32 4 2,147,483,648 až 2,147,483,647 uint System.UInt32 4 0 až 4,294,967,295 long System.Int64 8 9,223,372,036,854,775,808 až 9,223,372,036,854,775,807 ulong System.UInt64 8 0 až 18,446,744,073,709,551,615 Uvedené názvy typů jsou jediné možné, tj. narozdíl od C++ nelze psát např. long int. Všechny uvedené typy jsou ve skutečnosti struktury, které jsou deklarované v prostoru jmen System. Následující deklarace znamenají totéž: System.Int32 i = 10; int i = 10; 9

Celočíselné konstanty lze zapsat v desítkové nebo šestnáctkové soustavě ve stejném tvaru jako v C++. Narozdíl od C++ nelze zapsat konstantu v osmičkové soustavě. Celočíselná konstanta je prvního z typů int, uint, long nebo ulong, do kterého se vejde. Explicitní stanovení typu konstanty pomocí přípony za konstantou. Přípona U nebo u L nebo l UL nebo ul nebo LU nebo lu Typ uint long ulong Rozšiřující konverze, tj. konverze, při nichž nemůže dojít ke ztrátě informace, lze provést automaticky. tj. Např. hodnotu typu short lze přiřadit do proměnné typu int. Zužující konverze, tj. konverze, při nichž může dojít ke ztrátě informace, je nutno explicitně předepsat. K tomu slouží operátor přetypování (typ), známý z C++. Jakýkoliv celočíselný typ lze implicitně konvertovat na reálný typ a typ decimal. Opačně se musí použít explicitní konverze. Např. int i; long j; j = i; // OK i = j; // Chyba i = (int)j; // OK Celá čísla nelze použít jako logické hodnoty. Pro celá čísla jsou definovány následující operátory, mající stejný význam jako v C++: unární aritmetické operátory +, binární aritmetické operátory +, -, *, /, % operátory inkrementace a dekrementace ++ a relační operátory <, >, <=, >=, ==,!= bitové operátory, &, ~, <<, >>, ^ Při operacích s celými čísly může vzniknout výsledek, který přesahuje rozsah daného typu může dojít k celočíselnému přetečení. Ke kontrole přetečení existují operátory checked a unchecked. Syntaxe: použití operátorů checked a unchecked: checked ( výraz ) unchecked ( výraz ) Implicitně se celočíselné přetečení nekontroluje. Zapnutí kontroly celočíselného přetečení v celém programu: menu Projet Properties Build, tlačítko Advanced, zaškrtávací políčko Check for arithmetic overflow/underflow. Výraz v operátoru checked bude program za běhu kontrolovat na přetečení. Pokud k němu dojde, vyvolá výjimku System.OverflowException. Výraz v operátoru unchecked nebude program za běhu kontrolovat na přetečení. Pokud se má kontrolovat resp. nekontrolovat přetečení ve skupině výrazů, lze použít příkaz checked resp. unchecked. 10

Syntaxe: příkazy checked a unchecked: checked příkazy unchecked příkazy Příklad class Program static void Main(string[] args) int i = 21; // číslo 21 a vyšší vyvolá výjimku přetečení Console.WriteLine("Faktoriál " + i + " je " + Matematika.Faktoriál(i)); Console.ReadKey(); class Matematika public static long Faktoriál(int n) long s = 1; // Varianta 1 // while (n > 0) s = checked(s*n--); // Varianta 2 checked while (n > 0) s *= n--; return s; 11