Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilEmma Křížová
1
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat indexy) Definují se „podobně“ jako vlastnosti Název indexeru je vždy this, po němž násle- dují jeho parametry (v hranatých závorkách) Používá přístupové metody: –get : pro načtení hodnoty na daném indexu (indexech) –set : pro zápis hodnoty na daném indexu (indexech) zapisovaná data jsou předávána parametrem value
2
13/04/20152 Indexery (2) Příklad: public int this[int index] { get { … } set { … } } Poznámka: –pomocí indexerů je možné s třídami a strukturami pracovat i jako s vícerozměrnými poli (přidáním dalšího argumentu do hranatých závorek): public double this [int i, int j]
3
13/04/20153 Metody s proměnným počtem parametrů Jazyk C# umožňuje definovat metody akcep- tující variabilní počet skutečných parametrů Pro definici metody s proměnným počtem pa- rametrů se využívá modifikátor params Modifikátor params může být uvedený pou- ze před posledním parametrem metody Parametr zapsaný za params musí být vždy typu pole
4
13/04/20154 Řetězce Řetězec představuje posloupnost znaků, tj. hodnot typu char Jednotlivé znaky lze zpřístupnit pomocí jejich indexů (zapisovaných v hranatých závorkách) Narozdíl od jazyka C řetězce nejsou ukonče- ny znakem ’\0’ Řetězce mohou být v jazyku C# reprezento- vány např.: –datovým typem string (synonymum pro bázo- vou třídu System.String ) –třídou StringBuilder (definována ve jmen- ném prostoru System.Text )
5
13/04/20155 Třída String (1) Definována ve jmenném prostoru System Slouží pro ukládání řetězců a práci s nimi Délku řetězce (počet znaků) lze získat pomocí vlastnosti Length Obsahuje mimo jiné přetížený operátor: –+ pro zřetězení (spojení) dvou řetězců –== pro porovnání dvou řetězců na rovnost Poskytuje také sadu metod, např.: –Compare, CompareOrdinal : lexikograficky porovnává řetězce se (bez) zohledně- ním (zohlednění) místního jazykového nastavení
6
13/04/20156 Třída String (2) –Format : nahrazuje formátovací značky ( {0}, {1} apod.) v ře- tězci hodnotami dalších parametrů –IndexOf, LastIndexOf : najde první (poslední) výskyt podřetězce nebo znaku v řetězci –Insert : vloží (od zadané pozice) podřetězec do řetězce –PadLeft, PadRight : doplní zleva (zprava) řetězec opakováním daného znaku –Remove : vymaže část řetězce
7
13/04/20157 Třída String (3) –Replace : nahradí výskyty daného řetězce zadaným řetězcem nebo znakem –Split : rozdělí řetězec na podřetězce k rozdělení dojde v místech nalezení zadaného znaku –Substring : vrátí podřetězec začínající na zadané pozici v řetězci –ToLower, ToUpper : převede řetězec na malá (velká) písmena –TrimStart, TrimEnd, Trim : odstraní ze začátku (konce, začátku i konce) řetězce mezery
8
13/04/20158 Třída String (4) Poznámky: –řetězec reprezentovaný třídou string je neměn- ný (immutable) metody manipulující s řetěz- cem vytvářejí novou instanci –znaky na dané pozici (indexu) se chovají jako read-only, tj. není možné provést přiřazení (zápis) znaku na zadanou pozici, např zápis.: string s = ”Hello world”; s[1] = ’a’; //nelze způsobí chybu
9
13/04/20159 Třída StringBuilder (1) Definována ve jmenném prostoru System.Text Při úpravě řetězců reprezentovaných třídou StringBuilder nedochází k vytváření nové instance, ale upravuje se stávající obsah Nová paměť je alokována pouze v případě, že po vykonané operaci řetězec přesahuje speci- fikovanou kapacitu Vykazuje větší efektivitu při operacích jako jsou např. zřetězení řetězců, náhrada části řetězce, vkládání znaků do řetězce apod.
10
13/04/201510 Třída StringBuilder (2) Poskytuje např. metody: –Append : připojení řetězce –Insert : vložení řetězce –Remove : odstranění znaků z řetězce –Replace : nahrazení výskytu znaku nebo podřetězce jiným zna- kem nebo podřetězcem –ToString : vrací obsah řetězce přetypovaný na string
11
13/04/201511 Třída StringBuilder (3) Poznámky: –třída StringBuilder definuje také vlastnosti: Length : –zpřístupňuje aktuální délku řetězce Capacity : –určuje maximální počet znaků, pro něž je v současné instanci alokované paměťové místo –u instancí třídy StringBuilder lze přiřadit znak na zadaný index (pozici)
12
13/04/201512 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, 0.0 pro číselné typy false pro typ bool ’\0’ pro typ char –referenčních typů na hodnotu null
13
13/04/201513 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í
14
13/04/2015 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; } }
15
13/04/201515 Struktury (4) [4, 3] [0, 0] pt1 pt2 dog1 dog2 N/A pt1 = new Point(4, 3); pt2 = new Point() dog1 = new Dog(Color.White); N/A pt1 pt2 dog1 dog2 N/A Point pt1; Point pt2; Dog dog1; Dog dog2;
16
13/04/201516 Struktury (5) [4, 3] [9, 1] pt1 pt2 dog1 dog2 pt2.X = 9; pt2.Y = 1; dog2.Color = Color.Gray; [4, 3] pt1 pt2 dog1 dog2 pt2 = pt1; dog2 = dog1;
17
13/04/201517 Generické typy (1) Generické typy (generika) umožňují psát prog- ramy, které používají parametrizované typy Parametrizované typy jsou v době použití na- hrazeny typy konkrétními Vhodné v případech, kdy se stejný kód opaku- je pro různé datové typy lepší znovupouži- telnost Zabezpečují silnou typovou kontrolu v době překladu zdrojového kódu
18
13/04/201518 Generické typy (2) Generický typ ( T ) se zapisuje za název defino- vaného objektu mezi symboly ( ) V rámci jedné definice je možné použít i více parametrizovaných typů ( ) V jazyku C# lze pomocí generik definovat: –třídy –struktury –rozhraní –metody –delegáty
19
13/04/201519 Generické typy (3) Příklad definice generické metody: static void Swap (ref T p1, ref T p2) { T temp; temp = p1; p1 = p2; p2 = temp; } Příklad použití: int a = 10, b = 20; double x = 123.87; y = 15.654; Swap (ref a, ref b); Swap (ref x, ref y);
20
13/04/201520 Generické typy (4) Příklad definice generické třídy: class Stack { private T[] items; private int count; public Stack (int n) {…} public void Push(T item) {…} public T Pop() {…} } Příklad použití: Stack stack = new Stack (10); stack.Push(3); int x = stack.Pop();
21
13/04/201521 Generické typy (5) Na parametrizovaný typ mohou být kladena omezení (zapisována) pomocí klíčového slova where : –where T : struct : typ T musí být hodnotový typ –where T : class : typ T musí být referenční typ může se jednat o třídu, rozhraní, delegáta nebo pole –where T : new() : typ T musí mít veřejný konstruktor bez parametrů je-li toto omezení použito v kombinaci s ostatními, pak musí být uvedeno jako poslední
22
13/04/201522 Generické typy (6) –where T : class_name : typ T musí být odvozen ze specifikované třídy –where T : interface_name : typ T musí implementovat dané rozhraní je možné specifikovat několik těchto omezení najednou Omezení parametrizovaných typů jsou zapiso- vána v záhlaví třídy za jejím názvem Příklad: class MyClass where T : class, IComparable where U : struct { … }
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.