+ All Categories
Home > Documents > Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné...

Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné...

Date post: 15-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
23
Jazyk C# je blízký jazyku Java vytvořen na míru pro dot.net je integrován do Visual studio Dotnet rozlišuje velká a malá písmena je objektově orientovaný obsahuje nativní podporu komponentového programování podporuje jednoduchou dědičnost s možností násobné implementace rozhraní vedle členských dat a metod přidává vlastnosti a události správa paměti je automatická o destrukci objektů se stará Garbage Collector podporuje zpracování chyb pomocí výjimek zajišťuje typovou bezpečnost a podporuje řízení verzí podporuje atributové programování zajišťuje zpětnou kompatibilitu se stávajícím kódem na binární i zdrojové úrovni Základní tematické okruhy základní vlastnosti – direktivity, jmenné prostory typový systém – hodnotové a referenční typy třídy – atributy a metody pole – pole a kolekce rozhraní – implementace a kombinace rozhraní výrazy a příkazy – operátory podmínky a cykly – if, else, switch, while, for vyjímky – try, catch, finally… kolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní vlastnosti Jmenný prostor Značí se jako namespace Sdružuje související třídy a další typy Patří do něj kód uveený ve složených závorkách Pomocí using se nadefunje jmenný prostor
Transcript
Page 1: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Jazyk C# je blízký jazyku Java vytvořen na míru pro dot.net je integrován do Visual studio Dotnet rozlišuje velká a malá písmena je objektově orientovaný obsahuje nativní podporu komponentového programování podporuje jednoduchou dědičnost s možností násobné implementace rozhraní vedle členských dat a metod přidává vlastnosti a události správa paměti je automatická o destrukci objektů se stará Garbage Collector podporuje zpracování chyb pomocí výjimek zajišťuje typovou bezpečnost a podporuje řízení verzí podporuje atributové programování zajišťuje zpětnou kompatibilitu se stávajícím kódem na binární i zdrojové úrovni

Základní tematické okruhy základní vlastnosti – direktivity, jmenné prostory typový systém – hodnotové a referenční typy třídy – atributy a metody pole – pole a kolekce rozhraní – implementace a kombinace rozhraní výrazy a příkazy – operátory podmínky a cykly – if, else, switch, while, for vyjímky – try, catch, finally… kolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //…

Základní vlastnostiJmenný prostor

Značí se jako namespace Sdružuje související třídy a další typy Patří do něj kód uveený ve složených závorkách Pomocí using se nadefunje jmenný prostor

Direktivy Procesor umožňuje provádět podmíněný překlad pomocí zdvojeného kódu programu #define #undef #if #endif #elif #else #region – ignorová procesorem, slouží ke zpřehlednění kódu #endregion - ignorová procesorem, slouží ke zpřehlednění kódu

Page 2: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Typový systém = CTS Dvě hlavní kategorie, hodnotové a referenční typy

Hodnotové typy Instancí hodnotového typu jsou proměnné, které jsou ukládány do zásobníku

programu Obsahují pouze hodnotu daného typu bez dalších informací Nepodporují dědičnost Nedá se odvodit typ

Datové typy Celočíselné: byte, sbyte, short, unshort, int, uint, long, ulong Znakové: char Reálné: float a double

Decimální: decimal Logické: bool

Referenční typy Neuchovávají hodnotu, ale jen odkaz na paměťové místo Mohou nabývat hodnotu null Alokovány operátorem new Hodnoty se předávají odkazem Typy: object, string, class, interface, array, delegate

Neúplné typy Umožňují implementaci rozdělit do několika samostatných souborů Jsou deklarovány pomocí typového modifikátoru Musí být umístěny ve stejném jmenném prostoru jako ostatní rozdělené části Uživatelský kód může být oddělen od generovaného kódu, což zabraňuje nástrojům

v přepisu uživatelských změn Umožňuje práci více programátorů na jednom kódu v reálném čase Umožňuje dělit větší implementace Možné ulehčení údržby a opravy změn ve zdrojovém kódu Využitím neúplných typů se nijak neovlivní spustitelný kód Soubory definující jeden typ jsou spojeny až při překladu a nelze je později

jakýmkoliv způsobem rozšířit či modifikovat Nepovolují stejné deklarace proměnných v různých částech

Page 3: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Modifikátor partial není povolen pro deklarace delegátů a objektů typu enum

TřídyČleny tříd

Atributy = proměnné udržující stav objektu Metody = procedury a funkce implementující služby objektem poskytované Vlastnost = je označována za chytrou položku (vypadá jako položka, ale kontroluje

přístup k jednotlivým datům) Události – umožňují komunikaci s okolím objektu

Viditelnost členů Public – viditelné bez omezení Private – přístupné pouze v rámci třídy Protected – přístupné pouze v rámci třídy a potomkům třídy Internal – viditelnost v rámci assembly

Metody tříd Nejsou součástí objektu Jsou alokovány jen jedenkrát Společné pro všechny instance třídy

Charakteristika metody Má jméno Má návratovou hodnotu Libovolný počet parametrů Má určenou viditelnost

Přetížené metody Liší se v počtu nebo typu parametrů Lze je rozlišovat dle návratové hodnoty

Virtuální metody Podporují polymorfismus Lze překrýt metodou potomka

Parametry metod Jsou předávány do metody hodnotou Funkce získá kopii skutečných parametrů a jakékoliv modifikace uvnitř těla metody

se nepromítnou zpět

Předání parametru odkazem Metoda se nevytváří vlastní kopii, modifikuje přímo proměnnou, která jí byla předána Takové parametry označujeme klíčový slovem ref

Definice výstupního parametru Parametry označujeme klíčovým slovem out Parametry pak přenášejí své hodnoty směrem ven z metody

Page 4: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Vlastnosti Na venek se chovají jako veřejné položky třídy Interně jsou tvořeny množinou metod realizujících čtení a zápis vlastností Při deklaraci přístupových práv je nutno dodržet: vnitřní změna práv může být uveden

jen u jedné z operací a musí být vždy více restriktivní

Dědičnost a polymorfismus Odvozené třídy dědičností obsahují všechna data a metody tříd základních Užívá se pouze jednoduchá dědičnost Dědičnost se vyjádří dvojtečkou uvedenou za jménem třídy a názvem základní třídy Chceme-li předefinovat veřejnou metodu třídy, kterou dědíme, musíme užít klíčové

slovo new Pro realizaci polymorfismu užijeme virtuální metody

Page 5: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Postup polymorfismu: metodu základní třídy označíme jako virtuální (klíčové slovo virtual) a metodu odvozené třídě označíme klíčovým slovem override (má se chovat polymorfně)

Modifikátory tříd Z abstraktních tříd nevzniká instance (objekt) Z abstraktních tříd pouze dědí potomci

Modifikátor sealed Tímto modifikátorem označená třída již nelze dále rozšiřovat Případný řetězec dědičnosti končí touto třídou Při aplikaci na metodu či vlastnost stanovujeme, že daný člen třídy již nemůže být

předefinován Metoda, kterou takto chceme označit musí být virtuální a musí být předefinovaná Modifikátor musí být kombinován s overrite

Modifikátor abstrakt Lze aplikovat na metody a třídy Označená třída je implicitně virtuální

Statické třídy Neexistují u nich členské metody ani členská data Musí být odvozeny od třídy objekt Rozšiřují existujíc vzor CDCLASS o statické členy Je deklarována klíčový slovem static Zabrání založení instancí a dědičnosti Zabrání užití členských metod a dat

Page 6: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Pole a kolekcePole

Pole jsou třídy odvozené od mateřské třídy Systém.Array Chápeme jako množinu proměnných stejného datového typu S polem pracujeme jako s celkem Na jednotlivé proměnné pole se odkazujeme pomocí indexů pole a poté s nimi

pracujeme jako s obyčejnými proměnnými Každý počáteční prvek pole má index 0 Druhy: jednorozměrná, vícerozměrná, vícerozměrná nepravidelná

Deklarace Vytvoření instancí pole pomocí statické metody Systém.Array.CreateInstance()

Označení typu provedeme hranatou závorkou

kolekce Jsou standartní datové struktury doplňující pole Je jediná vestavěná datová struktura v jazyce Obecné rozhraní jež definuje standardizovanou sadu vzorů pro návrh kolekce

Page 7: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Konkrétní třídy implementují jako rozhraní

Rozhraní Umožňuje třídám přidat jisté charakteristiky nebo schopnosti nezávislé na hierarchii

tříd

Implementace rozhraní Začíná klíčovým slovem interface, po kterém následuje jeho jméno Ve složených závorkách je pak tělo rozhraní, které může obsahovat výčet metod (jen

hlavička metody bez těla), vlastnosti indexerů a událostí V rozhraní jsou všechny členy automaticky veřejné – publick Lez říci, že rozhraní je abstraktní třída jejíž metody jsou abstraktní

Page 8: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Třída může implementovat několik rozraní Rozhraní leze rozšiřovat a kombinovat pomocí dědičnosti

Operátory Množina operátorů je až na pár výjimek identická s operátory v jiných jazycích Definice operátorů je vždy statická a veřejná a pak následuje návratový typ

(libovolný)

Page 9: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Klíčové slovo operator přetěžuje operátor op Přetěžujeme-li unární operátor, definujeme jediný parametr, pro binární jsou

parametry dva a na tyto parametry nejsou kladena žádná omezení Je vhodné, aby první parametr byl stejného typu jako třída, jejíž operátor přetěžujeme Základní operátory:

Specifické operátory Typeof – slouží k reflexi a vrací instanci třídy Systém.Tipe. Sizeof – slouží ke zjištění velikosti hodnotových typů (tato operace je považována za

nebezpečnou, proto musí tento operátor být umístěn v bloku unsafe) Is – zjistí, zda je prvek instancí třídy As – provádí přetypování na jiný typ ?? – porovnává objekty a vrací hodnotu, která není NULL :: - omezení na lokální nebo globální namespace

Přetěžované operátory

Page 10: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Uživatelsky definované konverze Slouží ke konverzi třídy nebo struktury do jiné třídy Typ, pro který je konverze definována musí být definován v parametru, nebo musí

konverze tento typ vracet Definice musí být veřejná a statická Implicitní – jsou provádšny bez nutnosti zadání čehokoliv uživatelem Explicitní – uživatel musí zadat, že che provést konverzi

Výrazy a příkazy Příkaz je krok v cestě algoritmu Příkazy se provádějí většinou v pořadí zápisu a některé se musí ukončovat středníkem Blok označíme symboly {a} a dovnitř bloku můžeme vložit další příkazy popřípadě

blok Prázdný příkaz se vyjadřuje pomocí dvojice složených závorek bez obsahu Prázdný příkaz lze též zadat středníkem Deklarace lokální proměnné nebo lokální konstanty je považována za příkaz, lze je

užívat až do konce bloku Výrazový příkaz – vznikne připojením středníku a musí měnit proměnou, vlastnost

atd.

Podmínky (podmíněné příkazy)If

Má stejnou syntaxi jako v Java

Switch Používáme pro testování více vstupních podmínek

Page 11: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Return Vrací řízení volající funkci Může být spojen i s hodnotou, pokud volající metoda má jinou návratovou hodnotu

nežli void

Throw Slouží k vyvolání vyjímky Uplatní se při ošetření části kódu

Page 12: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

CyklyWhile a do-while

Jako v Java

For a forearch Jako u java Forearch prochází všechny prvky pole či kontejneru

Page 13: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Skokové příkazy Brak – způsobí vyskočení z aktuálního cyklu nebo switche Goto – přesouvá provádění instrukcí na místo dané návěštím (viz Assembler), nelze

skočit dovnitř blokového příkazu Continue

Výjimky Pokud program narazí na neočekávaný problém, tak se objeví vyjímka Je odvozena od třídy objekt

Page 14: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Umožněna definice vlastních typů výjimek Přehled výjimek:

Lze vyvolat příkazem throw

Delegáty a anonymní metodyDelegát

Delegát je odkaz na metodu, který umožňuje sdílet změny mezi objekty Nahrazuje procedurální typ pinter Hlavním využitím delegátu je definic událostí

Page 15: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Definuje se pomocí klíčového slova delegate (public delegate void MujDelegat(string nejaky_parametr) )

Delegát musí být interně spojen s celou množinou metod K instanci delegáta lze připojit dalšího delegáta a to pomocí operátoru += nebo + Vrací-li delegát neprázdný návratový typ, pak je vrácena hodnota posledního delegáta Delegát lze odebrat pomocí operátorů -= nebo –

Anonymní metody Umožňují psát kód delegátu přímo inline Využít je lze v místě kódu, kde jsou očekávány delegáty popřípadě delegáty

s argumenty

Vlastnosti Možnost vypuštění seznamu parametr při definici delegáta, pokud tento seznam

nevyužíváme Využití lokálních proměnných, kterou jsou definovány v těle metody v níž je

anonymní metoda umístěna Z anonymní metody můžeme přistupovat k lokálním proměnným a parametrům,

takovým proměnným říkáme vnější (outer) proměnné anonymních metod

Pravidla určující návratovou metodu Návratový typ a seznam parametrů delegáta musí být kompatibilní s anonymní

metodou ještě před tím, než dojde k implicitní konverzi na delegátský typ delegáta

Seznam parametrů delegáta je kompatibilní s anonymní metodou když: Anonymní metoda nedefinuje seznam parametrů a delegát nemá žádné out parametry Pro anonymní metodu definovanou společně se seznamem parametrů platí, že seznam

parametrů musí přesně odpovídat parametrům delegáta. Seznam tedy musí mít stejný počet, typ a modifikátory parametrů jako parametry delegáta

Návratový typ delegáta je kompatibilní s anonymní metodou kdy: Návratový typ delegáta je void a metoda neobsahuje žádný příkaz return nebo

obsahuje tento příkaz bez výrazu Návratový typ delegáte není void, ale všechny výrazy v metodě vázané s příkazem

return mohou být implicitně přetypovány na návratový typ delegáta

Události Zpracování událostí je proces, kdy jeden objekt dokáže upozornit další objekty na to,

že došlo k nějaké změně stavu události Systém událostí interně využívá delegátů Delegát musí mít dva parametry a oba jsou objekty První parametr udává zdroj události Druhý parametr obsahuje informace spojené s konkrétní události (tento objekt musí

rozšiřovat třídu EventArgs Pokud chceme doplnit informace o probíhající události, musíme definovat třídu

dodatečných argumentů událostí

Vyvolání události Pokud druhý člen nabývá hodnoty NULL, tak to znamená, že si tuto událost žádná

jiná třída (než třída dodatečných argumentů) tzv. nepředplatila => nebude na tuto událost nikterak reagovat

Page 16: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Je dobrépřed vyvoláním události zkontrolovat, zda druhý člen nenabývá hodnoty NULL

Tím, že jsme ve třídě deklarovali událost, je možné k ní přistupovat jako ke členu delegáta určitého typu

Nemohou být vyvolány z jiné třídy, než ve které byly deklarovány včetně tříd odvozených

Implementovat lze zavoláním metody implementované na bázové třídě, která danou událost vyvolává

Obsluha události Pro obsluhu je nutné nějakou třídu nastavit jako předplatitele události K události leze přistoupit jako ke členu instance, ale jeho užití je velmi omezené Jediná možná úprava je přidání nebo odebrání delegáta pro obsluhu

Generické datové typy Generický kód užívá parametrizované typy Parametrizované typy jsou nahrazeny konkrétními typy v době užití kódu

Výhody Čistý, rychlý a bezpečný výsledný kód Silná typová kontrola v době překladu Odhalení všech vad, které by mohli způsobit havárii aplikace v důsledku špatně

užitých typů již při překladu Odstraní se časté a časově zbytečné operace boxing a unboxing Omezí se explicitní typové konverze, které jsou nutné v době překladu, kdy neznáme

typ objektu uloženého v universální kolekci

Základní omezení Vychází z užití generik

Specifikace požadavků na systémové parametry Zabezpečují, že typy poskytují požadovanou funkcionalitu Umožňují silnější typové kontroly při překladu Omezují potřeby explicitních typových konverzí Poskytují možnost omezení použitelnosti výsledného generika

Omezení generik

Omezení třídy (Class constraint) Konkrétní typ, který v generickém kódu použijeme, musí být odvozen od specifické

základní třídy => zajištění jisté funkcionality

Omezení rozhraním (Interface constraint) Zajišťuje, že užité rozhraní je implementováno od konkrétního specifického rozhraní

Omezení konstruktoru (Constructor constraint) Požadavek, aby třída nebo struktura, kterou užíváme obsahovala veřejný implicitní

konstruktor

Page 17: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Generické třídy Deklarace je stejná jako u deklarace třídy akorát vyžaduje seznam typových

parametrů k vytvoření skutečných typů Typový parametr: třída, abstraktní třída, rozhraní, výčtový typ

Atributy a metadata Dot.net definuje možnost asociovat libovolné informace (metadata) se zdrojovým

kódem apliace Metadata jsou reprezentována atributy Po kompilaci se atributy stanou součástí assembly V programu přistoupíme k metadatům pomocí reflex

Předdefinované atributy Každý použitý atribut je instancí třídy která přímo nebo nepřímo dědí od třídy systém

atribute

Serializable Pokud chceme, aby instance třídy byla uložena na diskový prostor (serializována)

Obsolete Atribut signalizuje, že daná metoda je jicž zastaralá a není vhodné ji nadále užívat

Conditional Vytváří funkce pouze pro debuging programu

Uživatelsky definované atributyParametry atributů

Poziční parametry se dávají jako formální parametry konstruktoru a jsou vždy povinné

Pojmenované parametry se dávají pomocí jména a operátoru přiřazení

Cíl atributu je dán výčtovým typem Attribute Tragets a lze jej kombinovat pomocí logického operátoru or

nejsou kladeny žádná omezení a množinu atributů

Reflexe Aplikace mohou využívat metadata a rozšiřovat je o nové informace Reflexí je označováno prozkoumávání existujících typů metadat a uskutečňuje se

pomocí sady typů v oboru názvů systém refletion Základní jednotkou aplikace jsou její typy obsahující členy vnořené typy Typy jsou v modulech a ty obvykle v sestavách Všechny elementy aplikace jsou popsány metadaty Za běhu aplikace jsou tyto elementy obsaženy uvnitř domény indomain

Page 18: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Vytváření nových typů za běhu programu Obor názvů systém reflektionemit obsahuje třídy, které dokáží vytvořit za běhu úplně

nové typy¨ Umožňují definovat dynamickou sestavu v paměti Umožňuje Definovat dynamický modul v definované sestavě Umožňuje Definovat nový typ v definovaném modulu včetně jeho členů Umožňuje vytvořit kódy CIL potřebné k implementování aplikační logiky ve členech

Vlákna Ve výchozím stavu je pouze jedno vlákno, které vytvoří běhové prostředí CLR, je

označeno jako primární nebo hlavní vlákno Je podporováno paralelní zpuštění kódu pomocí ztv. Multithreadingu Aplikace může běžet v jednom nebo více vláknech Vlákna v jedné aplikaci jsou uzavřena v jednom kontejneru označovaným jako proces Ve výchozím stavu běží vlákna aplikace na pozadí => aplikace běží tak dlouho,

dokud běží alespoň jedno vlákno Jazyk umožňuje využití vláken běžících na pozadí – pokud vypneme všechna vlákna

běžící na popředí, tak se aplikace vypne, i když na pozadí vlákna ještě fungují Priorita vlákna určuje, kolik času dostane vlákno na vykonání své činnosti Vlákna leze koordinovat pomocí synchronizace

Page 19: Jazyk C# - Webgarden.cz50f8646375469... · Web viewkolekce – předdefinované třídy, obecné rozhraní události a delegáti – event…. Atributy a metadata - //… Základní

Stav vlákna lze zjisti pomocí vlastnosti ThreadState Neošetřená výjimka na vlákně shodí celou aplikaci ParamterizedThreadStart umožňuje překládání vláknu parametr typu objekt

Vytváření a spouštění vláken Třída Thread v rozhraní dot.net poskytuje podporu pro spuštěná vlákna v aplikacích Třída Thread obsahuje metody, které zdánlivě řeší operace pozastavení, pokračování a

ukončení vláken Vlákna jsou vytvářena pomocí konstruktoru třídy Thread předávajícího delegáta

ThreadStart, který označuje metodu, kde by měla začít práce vlákna Vlákno lze spusti bez parametru nebo s parametrem

Kooperativní multitásking Každé vlákno musí spolupracovat tím, že sdílí svůj stav, jinak se výkon začne

zhoršovat Užíván staršími verzemi Windows

Preemptivní multitásking Neposkytuje vláknu žádnou volbu při určování, jak bud činnost vykonávat Za stanovení, jak se má vlákno provádět je zodpovědný podsystém vlákna

Stavba vlákna Threadstate je neodcenitelný při debugingu, ale je problémové jeho užití pro více

vláken


Recommended