Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
PV178 – Úvod do vývoje v C#/.NET
RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, BRNO Kanc.: A209, : +420 –
2
Cíle předmětu Osvojit si základní návyky tvorby kvalitního kódu v jazyce C# Po absolvování tohoto předmětu by student měl: znát základní kroky a techniky doprovázející proces vývoje aplikací v C#/.NET ovládat prostředí Visual Studio znát hlavní rysy a programové konstrukce pro-gramovacího jazyka C# být schopen psát kvalitní objektový kód 06/12/2017
3
Organizace předmětu Rozsah (hodinová dotace): 1/2 Přednáška: Cvičení:
2 hodiny týdně prvních 7 týdnů Cvičení: celý semestr 06/12/2017
4
Používané technologie
Výuka probíhá s využitím: programovacího jazyka C# platformy MS .NET Framework vývojového prostředí MS Visual Studio: studenti Fakulty informatiky mohou získat Visual Studio Community 2015 prostřednictvím Microsoft Imagine (přístup přes Autentizované služby na stránce a odkaz MSDN AA) 06/12/2017
5
Vstupní předpoklady Znalost: základů programování a algoritmizace
syntaxe programovacího jazyka C/C++ nebo Java základů objektově orientovaného programování – na úrovni předmětu: PB161 Programování v jazyce C++ nebo PB162 Programování v jazyce Java 06/12/2017
6
Osnova (1) Úvod do C#/.NET: Výčtové datové typy, indexery, pole
architektura .NET Frameworku charakteristika jazyka C#, program v jazyce C# typový systém třída a její členy předávání parametrů metodám vlastnosti (properties) rozhraní struktury jmenné prostory Výčtové datové typy, indexery, pole 06/12/2017
7
Osnova (2) Generické datové typy, kolekce Řetězce, iterátory, výjimky
Delegáty, anonymní metody, lambda výrazy, události LINQ – jednotný přístup k datům a jejich zpracování Práce se soubory a proudy Práce s daty (XML, JSON): serializace/deserializace tříd ADO.NET 06/12/2017
8
Osnova (3) Reflexe – získávání typových informací v době běhu programu
Regulární výrazy – třída Regex Paralelní zpracování (multithreading) Asynchronní programování 06/12/2017
9
Literatura Pelikán, Jaroslav: Prezentace k přednáškám z před-mětu PV178 Úvod do vývoje v C#/.NET, Richter, Jeffrey: CLR via C#, 3rd ed. Redmond: Microsoft Press, 2010, ISBN: Skeet, Jon: C# in depth, 2nd ed. Stamford: Manning, 2011, ISBN: Marguerie, Fabrice, Steve Eichert, Jim Wooley: Linq in action, Edited by Matt Warren, Greenwich: Manning, 2008, ISBN: Sharp, John: Microsoft Visual C# 2010, Computer Press 2010, ISBN: 06/12/2017
10
Ukončení předmětu V průběhu semestru je možné získat maxi-málně 100 bodů: 54 bodů: domácí úkoly 16 bodů: testy na cvičeních 30 bodů: závěrečný test Při ukončení předmětu: kolokviem je zapotřebí získat min. 70 bodů zápočtem je zapotřebí získat min. 60 bodů Poznámka: docházka na cvičení nebude kontrolována neúčastí na cvičeních přicházíte o možnost bodů z testů 06/12/2017
11
.NET Framework (1) Softwarová platforma vyvinutá firmou Micro-soft, která podporuje vytváření a spouštění aplikací a webových služeb VB C++ C# J# … Common Language Specification ASP.NET Web Forms Web Services Windows Forms Architektura .NET Framework 2.0 Visual Studio .NET ADO.NET & XML Base Class Library Common Language Runtime Operační systém 06/12/2017
12
.NET Framework (2) CLR – Common Language Runtime:
běhové prostředí realizující základní infrastruk-turu, nad kterou je celý framework vybudován provádí spouštění všech programů napsaných pro .NET Framework (nezávisle na použitém programovacím jazyku) lze přirovnat k virtuálnímu stroji u jazyka Java zajišťuje např.: spouštění programů správu paměti (včetně automatické garbage collec-tion), výpočetních vláken (threads), výjimek typovou bezpečnost 06/12/2017
13
.NET Framework (3) BCL – Base Class Library: ADO.NET & XML:
knihovna dodávaná s .NET Frameworkem obsahuje třídy sloužící pro práci např. s: grafikou soubory databází počítačovou sítí ADO.NET & XML: knihovna pro přístup k datům a pro práci s XML soubory 06/12/2017
14
.NET Framework (4) ASP.NET: Windows Forms:
soubor technologií pro tvorbu webových aplika-cí a webových služeb Windows Forms: programové rozhraní pro vývoj grafických desk-topových aplikací poskytuje sadu tříd umožňujících přístup ke standardním ovládacím prvkům operačního sys-tému MS Windows (okno, tlačítko, menu, editační prvek atd.) 06/12/2017
15
.NET Framework (5) CLS – Common Language Specification:
definuje základní vlastnosti programovacích ja-zyků podporované běhovým prostředím CLR .NET Framework 3.0: přináší čtyři hlavní nové komponenty: WPF – Windows Presentation Foundation: rozhraní pro vytváření grafických aplikací a jejich uživatel-ských rozhraní založeno na XML a vektorové grafice při své činnosti využívá Direct3D WCF – Windows Communication Foundation: technologie pro vývoj webových služeb a komunikační infrastruktury aplikací umožňuje vytváření aplikací orientovaných na služby (SOA – Service Oriented Application) 06/12/2017
16
.NET Framework (6) .NET Framework 3.5:
WF – Windows Workflow Foundation: technologie pro definování (modelování) heterogenních sekvenčních procesů Windows CardSpace: programová komponenta, která bezpečně ukládá digitální identity a poskytuje jednotné rozhraní pro volbu identity k určité transakci .NET Framework 3.5: přidává dvě komponenty pro datové služby: ADO.NET Entity Framework ADO.NET Data Services poskytuje LINQ: komponenta umožňující jednotný přístup k datům a jejich zpra-cování deklarativním a funkcionálním způsobem 06/12/2017
17
.NET Framework (7) .NET Framework 4.0: .NET Framework 4.5:
přináší zejména Parallel Extensions zlepšující podporu paralelních výpočtů u vícejádrových a distribuovaných systémů: PLINQ: paralelní implementace technologie LINQ Task Parallel Library: množina tříd umožňující efektivní zpracování úloh s využi-tím všech dostupných jader procesoru .NET Framework 4.5: doplňuje podporu pro: aplikace typu Metro Style asynchronní programování 06/12/2017
18
Životní cyklus aplikace (1)
CLI C# zdrojový kód Překladač VB zdrojový kód Překladač CIL CLR JIT J# zdrojový kód Překladač CIL – Common Intermediate Language: dříve nazývaný jako MSIL – Microsoft Interme-diate Language jazyk nezávislý na platformě, do něhož jsou pře-kládány programy napsané v jazycích kompati-bilních s .NET Frameworkem 06/12/2017
19
Životní cyklus aplikace (2)
CLI – Common Language Infrastructure: otevřená a standardizovaná specifikace popisuje vlastnosti spustitelného kódu a prostře-dí pro jeho běh umožňuje, aby aplikace byly napsány v různých vyšších programovacích jazycích a následně spouštěny v rozličných prostředích součástí CLI je i CTS – Common Type System popisující datové typy a typový systém mezi implementace CLI patří CLR a Mono 06/12/2017
20
Životní cyklus aplikace (3)
JIT – Just-In-Time compilation: realizována JIT překladačem, který je součástí CLR provedena v okamžiku, kdy systém detekuje, že dochází ke spuštění aplikace v CIL během ní dochází k vygenerování strojového kódu, který může být spuštěn na aktuálně použí-vané platformě výsledný kód běží ve virtuálním stroji .NET Frameworku jedná se o řízený kód (managed code) 06/12/2017
21
Programovací jazyk C# Vyvinutý v rámci platformy MS .NET
Jedná se o objektově orientovaný jazyk Založen na jazycích C++ a Java Syntaxe C# je podobná syntaxi jazyka C (Java) Lze jej využít k tvorbě např.: desktopových aplikací webových aplikací, webových služeb a stránek programů pro mobilní zařízení (PDA, mobilní telefony) databázových programů 06/12/2017
22
Program v jazyce C# (1) Tvořen třídami a jejich členy (members)
Třídy a další datové typy jsou organizovány ve jmenných prostorech (namespace) a mo-hou být vnořovány do jiných tříd Vstupním bodem každého programu v C# je metoda (funkce obsažená v typu třída) Main: může být v programu pouze jedna jedná se o statickou metodu návratovým typem může být void nebo int může přijímat parametry z příkazové řádky OS 06/12/2017
23
Program v jazyce C# (2) Metoda Main může mít jednu z následujících signatur: static void Main() static void Main(string[] args) static int Main() static int Main(string[] args) Poznámka: jazyk C# podobně jako jazyk C/C++ rozlišuje velká a malá písmena (jazyk case sensitive) 06/12/2017
24
Standardní výstup (1) Pro zobrazení hodnot na standardní výstup je možné použít statické metody definované ve statické třídě Console: Write: po vypsání posledního znaku neprovádí odřádkování WriteLine: po vypsání posledního znaku provádí odřádkování Poznámka: třída Console je definována ve jmenném prostoru System 06/12/2017
25
Standardní výstup (2) Prvním parametrem uvedených metod může být řetězec obsahující (kromě textu) specifi-kace, které určují místa, na nichž mají být vy-psány hodnoty dalších parametrů Specifikace se zapisují ve složených závor-kách, jež obsahují pořadové číslo vypisova-ného parametru Příklad: Console.Write("a = {0}, b = {1}", a, b); 06/12/2017
26
Standardní výstup (3) Poznámky:
součástí specifikace mohou být i informace o tom, jakým způsobem má být hodnota odpo-vídajícího parametru formátována je-li zapotřebí vypsat hodnotu pouze jednoho parametru, je možné řetězec (jako první para-metr) vynechat 06/12/2017
27
Standardní vstup Pro načtení hodnoty ze standardního vstupu jsou ve třídě Console definovány statické metody: Read: načítá ze standardního vstupu jeden znak vrácená hodnota je typu int ReadLine: načítá ze standardního vstupu celý řádek vrácená hodnota je typu string Poznámka: pro převody mezi různými datovými typy lze použít metody statické třídy Convert (defi- nována ve jmenném prostoru System) 06/12/2017
28
Hodnotové a referenční typy (1)
Každý typ v jazyce C# je přímo nebo nepří-mo odvozen od třídy object Hodnotové typy (value types): jejich proměnné přímo nesou (obsahují) svá data každá proměnná má svou vlastní kopii dat změna hodnoty jedné proměnné neovlivňuje hodnotu proměnné jiné jsou ukládány na zásobníku patří mezi ně většina předdefinovaných typů (vyjma object a string) a výčtové typy pro vytvoření vlastních hodnotových typů slouží struktury 06/12/2017
29
Hodnotové a referenční typy (2)
Referenční (odkazové) typy (reference types): jejich proměnné ukládají odkaz (referenci) na data (objekty) pokud dojde k přiřazení proměnné, tak dojde ke zkopírování odkazu je možné, aby dvě proměnné obsahovaly odkaz na stejný objekt operace nad jednou proměnnou může ovlivnit objekt, na nějž se odkazuje proměnná jiná v paměti jsou ukládány na spravované haldě (managed heap) 06/12/2017
30
Předdefinované datové typy (1)
Jazyk C# poskytuje sadu předdefinovaných datových typů, které se nachází ve jmenném prostoru System Jednotlivé datové typy (vyjma typu string a object) jsou synonymy struktur, které obsahují metody tyto metody lze pomocí tečkové notace volat Všechny tyto struktury poskytují např. meto-du ToString, která vrací řetězec reprezen-tující současný objekt 06/12/2017
31
Předdefinované datové typy (2)
Popis Velikost Typový ekvivalent sbyte celočíselný typ se znaménkem 8 b System.SByte short celočíselný typ 16 b System.Int16 int celočíselný typ 32 b System.Int32 long celočíselný typ 64 b System.Int64 byte celočíselný typ bez znaménka 8 b System.Byte ushort celočíselný typ 16 b System.UInt16 uint celočíselný typ 32 b System.UInt32 ulong celočíselný typ 64 b System.UInt64 float reálný typ (s jednoduchou přesností) 32 b System.Single double reálný typ (s dvojitou přesností) 64 b System.Double 06/12/2017
32
Předdefinované datové typy (3)
Popis Velikost Typový ekvivalent bool logický (booleovský) typ 8 b System.Boolean char znakový typ (Unicode, UTF-16) 16 b System.Char decimal peněžní hodnoty (28 platných číslic) 128 b System.Decimal object kořen objektové hierarchie System.Object string posloupnost znaků (řetězec) 16 b / znak System.String Poznámka: datové typy string a object jsou popsány jako třídy (nikoliv jako struktury) 06/12/2017
33
Nulovatelné typy (1) Nulovatelné (nullable) typy představují rozší-ření, jež umožňuje přiřazovat hodnotu null do proměnných všech hodnotových typů Hodnota null vyjadřuje, že proměnná nemá žádnou hodnotu Vhodné zejména pro pohodlnou práci s SQL a s relačními databázemi (ve sloupci databáze může být hodnota NULL) Zapisovány pomocí otazníku za názvem typu Příklad: int? x; 06/12/2017
34
Nulovatelné typy (2) Poskytují vlastnosti (určené pouze pro čtení):
Value: obsahuje hodnotu dané proměnné je-li hodnota proměnné null, pak způsobí výjimku pro změnu hodnoty se používá přiřazení přímo do proměnné HasValue: booleovská vlastnost: false: vyjadřuje, že proměnná nemá žádnou hodnotu nastaví se automaticky, je-li do proměnné přiřazena hodnota null true: vyjadřuje, že proměnná má určitou hodnotu nastaví se automaticky, je-li do proměnné přiřazena jiná hodnota než null 06/12/2017
35
Nulovatelné typy (3) Konverze:
nenulovatelného typu na nulovatelný je provádě-na implicitně nulovatelného typy na nenulovatelný musí být provedena explicitně Příklad: int? age1 = 30; int? age2 = null; int age3 = 0; age3 = (int)age1; age2 = age3; 06/12/2017
36
Null coalescing operator (1)
Null coalescing (null splývající) operátor je zapisovaný ve tvaru výrazu: A ?? B Výsledek výrazu je: A: jestliže A neobsahuje hodnotu null B: v opačném případě Jestliže A obsahuje hodnotu null, pak B poskytne hodnotu k použití Používaný k definici implicitní hodnoty pro nulovatelné hodnotové nebo referenční typy 06/12/2017
37
Null coalescing operator (2)
Příklad: int? x = null; int? y = 10; int? z = x ?? y; int i = z ?? 4; Console.WriteLine("z = {0}", z); Console.WriteLine("i = {0}", i); Na výstupu bude vypsáno: z = 10 i = 10 06/12/2017
38
Implicitně typované proměnné
Definované pomocí klíčového slova var (bez použití identifikátoru označujícího datový typ) V době definice musí být provedena i jejich inicializace Představují silně typované proměnné Jejich typ je určen z pravé strany inicializace Příklad: var distance = 20; //int 06/12/2017
39
Datový typ třída – class (1)
Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje vlastnosti a chování objektů Je možné ji definovat pomocí klíčového slova class Může obsahovat následující členy: konstanty (constants) datové položky (fields) 06/12/2017
40
Datový typ třída – class (2)
metody (methods) konstruktory instance (instance constructors) statické konstruktory (static constructors) finalizery (finalizers) vlastnosti (properties) události (events) indexery (indexers) operátory (operators) vnořené deklarace typů (nested type declarations) 06/12/2017
41
Datový typ třída – class (3)
Každý člen uvnitř třídy má svoji tzv. přístup-nost (accessibility) určující, jakým způsobem je nebo není přístupný (viditelný) zvenčí Nejčastěji se používá přístupnost: public (veřejná): přístup k danému členu není nijak omezován člen je přístupný uvnitř i vně dané třídy private (privátní, soukromá): daný člen je přístupný pouze uvnitř třídy, v níž je defi-nován jedná se o implicitní přístupnost k členu 06/12/2017
42
Datový typ třída – class (4)
Datové položky (fields): reprezentují proměnné spojené s objektem nebo s třídou slouží k uchování informací Metody (methods): funkce definované uvnitř třídy implementují výpočet (akci), který může být pro-veden objektem nebo třídou obsahují: seznam formálních parametrů (může být i prázdný) návratovou hodnotu (je-li návratovým typem metody typ void, pak metoda nevrací žádnou hodnotu) 06/12/2017
43
Datový typ třída – class (5)
Konstruktory instancí (instance constructors): speciální typy metod slouží k vytvoření instance třídy (objektu) mají stejný název jako třída mohou obsahovat formální parametry nemohou vracet žádnou hodnotu (ani void) v jejich hlavičce není uvedený žádný návratový typ jedna třída může obsahovat více konstruktorů (pře-těžování – overloading) není-li definován žádný konstruktor, pak překladač automaticky vygeneruje konstruktor implicitní, kte-rý neobsahuje žádné parametry 06/12/2017
44
Datový typ třída – class (6)
Příklad třídy: class Square { private int side; public Square(int initialSide) { side = initialSide; } public int GetArea() { return side*side; } } 06/12/2017
45
Datový typ třída – class (7)
Na základě datového typu třída lze vytvořit její instanci Instanci typu třída označujeme jako objekt Objekt je vytvářen pomocí klíčového slova new (způsobí vyvolání konstruktoru) Příklad: Square sq; sq = new Square(5); nebo Square sq = new Square(5); 06/12/2017
46
Datový typ třída – class (8)
Proměnná sq bude obsahovat odkaz, kde je v paměti uložený objekt (třída je referenční datový typ) Poznámka: každá instance třídy je objektem, který zabírá svůj vlastní prostor v paměti a běží nezávisle na všech ostatních instancích Pro zpřístupnění členů třídy se používá tečko-vá notace: identifikátor proměnné typu třída nebo typu třída symbol tečka identifikátor označující člen třídy 06/12/2017
47
Datový typ třída – class (9)
Příklad: int s; Square sq = new Square(5); s = sq.GetArea(); Metody i datové položky mohou být deklaro-vány jako statické (static): zpřístupňovány prostřednictvím třídy před jejich zpřístupněním není nutné vytvářet in-stanci třídy (objekt) nezávislé na konkrétní instanci třídy 06/12/2017
48
Datový typ třída – class (10)
Poznámka: metoda Main musí být statická, protože před je-jím voláním se nevytváří instance třídy, v níž je definována Statické třídy: deklarovány s použitím klíčového slova static může obsahovat pouze statické členy nemůže obsahovat žádná data ani metody instancí příklad: třídy Math, Convert, Console 06/12/2017
49
Předávání parametrů metodám (1)
Parametry předávané hodnotou: deklarovány bez použití modifikátoru ref nebo out u hodnotových typů: dochází k předání kopie dat ze skutečného parametru do parametru formálního změny provedené uvnitř metody nad formálním para-metrem nijak neovlivňují hodnotu parametru skuteč-ného u referenčních typů: dochází pouze k předání odkazu jestliže metoda hodnotu přijatého objektu změní, pak se změna projeví i v původním objektu skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu 06/12/2017
50
Předávání parametrů metodám (2)
Parametry předávané odkazem: před formálním i skutečným parametrem musí být uveden modifikátor ref nedochází k vytvoření nového paměťového místa pro formální parametr formální parametr reprezentuje stejné paměťové místo, které náleží parametru skutečnému všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu 06/12/2017
51
Předávání parametrů metodám (3)
Parametry výstupní: před formálním i skutečným parametrem musí být uveden modifikátor out podobné chování jako u parametrů předávaných odkazem všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného skutečný parametr nemusí být v době volání ini-cializovaný, tj. nemusí mít přiřazenou hodnotu v průběhu metody mu musí být přiřazena hodnota 06/12/2017
52
Vlastnosti (1) Členy třídy umožňující přístup k charakteris-tickým atributům objektu nebo třídy, např.: délka řetězce velikost fontu titulek okna jméno zákazníka apod. Představují rozšíření datových položek: pojmenované členy s daným datovým typem používají stejnou syntaxi pro své zpřístupnění 06/12/2017
53
Vlastnosti (2) Na rozdíl od datových položek nereprezentují paměťové místo pro uložení hodnoty Překladač automaticky převádí zpřístupnění vlastností na volání přístupových metod Přístupové metody specifikují příkazy, jež mají být provedeny při: čtení hodnoty vlastnosti změně hodnoty vlastnosti (zápisu) 06/12/2017
54
Vlastnosti (3) Přístupové metody jsou zapisovány pomocí klíčových slov: get: uvozuje přístupovou metodu pro čtení set: uvozuje přístupovou metodu pro zápis Zapisovaná data jsou přístupovým metodám (set) předávána pomocí vestavěného (skry-tého) parametru value Konvence: soukromé datové položky jsou psány s malým po-čátečním písmenem, zatímco veřejné vlastnosti s počátečním písmenem velkým 06/12/2017
55
Vlastnosti (4) Příklad: class Square { private int side; public int Side { get { return side; } set { side = value; } } } 06/12/2017
56
Vlastnosti (5) Nechť je dána deklarace: int s; Square sq = new Square(5); Vlastnost Side lze zpřístupnit: pro čtení – např.: s = sq.Side; (volá sq.Side.get) pro zápis – např.: sq.Side = 2*s; (volá sq.Side.set) Vlastnost může obsahovat pouze metodu: get: vlastnost určena jen pro čtení set: vlastnost určena jen pro zápis 06/12/2017
57
Vlastnosti (6) Omezení vlastnosti:
vlastnost nelze použít jako parametr s modifiká-torem ref nebo out (za vlastností se skrývá pří-stupová metoda nikoliv paměťové místo) vlastnost může obsahovat jednu přístupovou me-todu get a jednu přístupovou metodu set (ne-smí obsahovat žádné jiné metody, datové polož-ky nebo vlastnosti) přístupové metody nesmí přijímat žádné paramet-ry (zapisovaná data jsou u metody set předává-na prostřednictvím value) u vlastností nelze používat modifikátor const 06/12/2017
58
Vlastnosti (7) Jestliže metody get, resp. set provádějí pouze operace, které slouží k přečtení, resp. přiřazení do datové položky, pak je možné jejich příkazovou část vynechat Příklad: class Square { public int Side { get; set; } } 06/12/2017
59
Vlastnosti (8) Překladač automaticky vygeneruje odpovída-jící programový kód: class Square { private int _side; public int Side { get { return _side; } set { _side = value;} } } 06/12/2017
60
Rozhraní (1) Rozhraní (interface) definuje kontrakt s třídou nebo strukturou, která je následně od tohoto rozhraní odvozena Představuje seznam členů, které se odvozená třída nebo struktura zavazuje implementovat Platí, že: jedno rozhraní může dědit od jednoho nebo více jiných rozhraní jedna třída může implementovat jedno nebo více rozhraní (může dědit pouze od jedné třídy) Dovoluje „nahradit“ vícenásobnou dědičnost 06/12/2017
61
Rozhraní (2) Umožňují třídám přidávat charakteristiky nebo schopnosti nezávisle na hierarchii tříd Rozhraní může obsahovat: metody události vlastnosti indexery Definice rozhraní: začíná klíčovým slovem interface, za nímž následuje jméno rozhraní obsahuje pouze signatury členů (nikoliv jejich implementace) 06/12/2017
62
Rozhraní (3) Všechny členy jsou automaticky veřejné (ma-jí přístupnost public): klíčové slovo public se neuvádí rozhraní udává, jak s objektem zvenku pracovat Jméno implementovaného rozhraní se zapisu-je za jméno třídy oddělené dvojtečkou Konvence: jména rozhraní se zapisují s počátečním velkým písmenem I Poznámka: od rozhraní nelze vytvořit instanci 06/12/2017
63
Rozhraní (4) Příklad: interface IPoint { int X { get; set; } int Y { get; set; } void WritePointCoords(); } class MyPoint : IPoint { public int X { get; set; } public int Y { get; set; } public MyPoint(int x, int y) { X = x; Y = y; } public void WritePointCoords() { Console.WriteLine (”[{0}, {1}]”, X, Y); } } 06/12/2017
64
Struktury (1) Hodnotové typy, které definujeme pomocí klíčového slova struct Mohou obsahovat stejné členy jako třídy Na rozdíl od tříd mají následující omezení, která vyplývají z podstaty hodnotových typů: vždy mají výchozí konstruktor (bez parametrů), který: nelze předefinovat nastaví všechny datové položky (členské proměnné): hodnotových typů na implicitní (defaultní) hodnotu: 0, pro číselné typy false pro typ bool ’\0’ pro typ char referenčních typů na hodnotu null 06/12/2017
65
Struktury (2) libovolný jiný konstruktor, který nezabezpečuje inicializaci (nastavení) všech členských proměn-ných musí volat konstruktor bezparametrický (po-mocí this()) poznámka: použití this() je nutné i v případě, že konstruktor inicializuje členské proměnné pomocí vlastností nelze v době definice inicializovat členské pro-měnné (vyjma statických) nemohou dědit, ale mohou implementovat rozhra-ní 06/12/2017
66
Struktury (3) Příklad: struct Point { public int X { get; set; } public int Y { get; set; } public Point(int x, int y) : this() { X = x; Y = y; } } class Dog { public Color Color { get; set; } public Dog(Color color) { Color = color; } } 06/12/2017
67
Struktury (4) Point pt1; Point pt2; pt1 N/A dog1 N/A Dog dog1;
pt1 = new Point(4, 3); pt2 = new Point() dog1 = new Dog(Color.White); pt1 [4, 3] dog1 pt2 [0, 0] dog2 N/A 06/12/2017
68
Struktury (5) pt2 = pt1; dog2 = dog1; pt1 [4, 3] dog1 pt2 [4, 3] dog2
pt2.X = 9; pt2.Y = 1; dog2.Color = Color.Gray; pt1 [4, 3] dog1 pt2 [9, 1] dog2 06/12/2017
69
Jmenný prostor (1) Jmenný prostor (namespace) představuje po-jmenovaný kontejner pro další identifikátory (např. třídy) Používán k seskupení a k rozlišení identifiká-torů Různé jmenné prostory mohou obsahovat stejné identifikátory Dva identifikátory se stejným názvem nelze zaměnit, pokud se nacházejí v různých jmen-ných prostorech 06/12/2017
70
Jmenný prostor (2) V rámci jednoho souboru může být defino-váno více jmenných prostorů Více souborů může zahrnovat jeden jmenný prostor Jmenné prostory mohou být do sebe vzájemně vnořovány Jmenný prostor je možné definovat pomocí klíčového slova namespace Každý jmenný prostor má přístup typu public (nelze změnit) 06/12/2017
71
Jmenný prostor (3) Příklad: Soubor1.cs Soubor2.cs
public class ClassA { } namespace NamespaceY { public class ClassB } public class ClassC { } namespace NamespaceY { public class ClassA } namespace NamespaceZ public class ClassB 06/12/2017
72
Jmenný prostor (4) Je-li identifikátor deklarovaný (definovaný) bez specifikovaného jmenného prostoru, pak jej automaticky překladač zařadí do globál-ního jmenného prostoru (global namespace) Identifikátor lze zpřístupnit pomocí označení jmenného prostoru (jmenných prostorů), např.: System.Console.WriteLine(…); kde: System – jmenný prostor Console – třída WriteLine – metoda 06/12/2017
73
Jmenný prostor (5) Pomocí klíčového slova using je možné da-ný jmenný prostor zařadit do aktuálního obo-ru platnosti Pro zpřístupnění identifikátoru pak není nutné uvádět označení jmenného prostoru Příklad: using System; Console.WriteLine(…); 06/12/2017
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.