Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

YOUR LOGO Dátové typy, Stream, StringBuilder,....

Podobné prezentace


Prezentace na téma: "YOUR LOGO Dátové typy, Stream, StringBuilder,...."— Transkript prezentace:

1 YOUR LOGO Dátové typy, Stream, StringBuilder,...

2 YOUR LOGO Dátové typy  Hodnotové a referenčné

3 YOUR LOGO Typy Keyword.NET Framework Type DescriptionVariable Declaration Example boolSystem.Boolean Boolean type; a bool value is either true or false. true or false bool val1 = true; bool val2 = false; byteSystem.Byte 8-bit unsigned integral type 0 to 255byte val1 = 12; charSystem.Char 16-bit unicode character 0 to 65535 char c = ‘a’; char c = 255; decimalSystem.Decimal 128-bit fixed-point decimal type with 28 significant digits -7.9e28 to 7.9e28 decimal val = 1.23M; doubleSystem.Double 64-bit double- precision floating point type -1.79e308 to 1.79e308 double val1 = 1.23; double val2 = 4.56D; floatSystem.Single 32-bit single- precision floating point type -3.40e38 to 3.40e38 float val = 1.23F ;

4 YOUR LOGO Keyword.NET Framework Type DescriptionVariable Declaration Example intSystem.Int32 32-bit signed integral type -2,147,483,648 to 2,147,483,647 int val = 12; longSystem.Int64 64-bit signed integral type - 9,223,372,036,8 54,775,808 to 9,223,372,036,8 54,775,807 long val1 = 12; long val2 = 34L; sbyteSystem.SByte 8-bit signed integral type -128 to 127sbyte val = 12; shortSystem.Int16 16-bit signed integral type -32,768 to 32767 short val = 12; stringSystem.String Immutable string of 16-bit Unicode characters All valid string characters string val = "Hello world." uintSystem.UInt32 32-bit unsigned integral type 0 to 4,294,967,296 uint val1 = 12; uint val2 = 34U; ulongSystem.UInt64 64-bit unsigned integral type 0 to 18,446,744,073, 709,551,615 ulong val1 = 12; ulong val4 = 78UL; ushortSystem.UInt16 16-bit unsigned integral type 0 to 65535ushort val1 = 12;

5 YOUR LOGO Inicializácia  System.Int32 x = 5; int x = 5;  x = new int(); - default i int je 0  Odkazové typy defaultne ukazujú na null

6 YOUR LOGO Operácie TypOperátorFunkciaPríklad Arithmetic +Addx = 1 + 2; -Subtractx = 1 - 2; *Multiplyx = 1 * 2; /Dividex = 1 / 2; %Modulus x = 5 % 2; vráti Konkatenace reťazacov +String concatenation string str = "Hello " + "World"; Increment/decrement ++Increment int x = 5; int y = x++; // hodnota y je 5 // hodnota x je 6 --Decrement int x = 5; int z = --x; // hodnota z je 4 // hodnota x je 4

7 YOUR LOGO TypOperátorFunkciaPríklad Porovnanie, výsledok true/false ==Rovný 1 == 1 would return true (1 is equal to 1) !=Nerovný 1 != 1 would return false 1 != 2 would return true (1 is not equal to 2) <Menší 1 < 2 would return true (1 is less than to 2) >Väčší 2 > 1 would return true (2 is greater than to 1) <=Menší alebo rovný 1 <= 1 would return true (1 is equal to 1) >=Väčší alebo rovný 1 >= 1 would return true (1 is equal to 1) Logický &&A ||Alebo true false

8 YOUR LOGO Priradenie +=Pripočítaj a priraď int x = 5; x += 100; // x 105; -=Odpočítaj a priraď int x = 5; x -= 100; // x 95; *=Vynásob a priraď int x = 5; x *= 100; // x 500; /=Vydeľ a priraď int x = 100; x /= 100; // x 20; %=Modulo a priraď int x = 5; x %= 100; // x 0;

9 YOUR LOGO Pretypovanie  Implicitné -Ku konverzii dôjde ak by bola bezstratová -Automatická konverzia  Explicitná -Je nutné zadať ak môže byť strata dát -(typ) hodnota -int x = (int)3.5f;

10 YOUR LOGO Implicitné pretypovanie

11 YOUR LOGO Strata dát

12 YOUR LOGO Pretypovanie referenčných typov  Implicitné – Upcasting -string str = "Hello World"; object obj = str;  Explicitné – Downcasting -castobject obj = "Hello World"; string str = (string)obj; -object obj = "Hello World"; string str = (obj as string);

13 YOUR LOGO Pretypovanie hodnotového na referenčný  Boxing  Vytvorenie kópie hodnoty a jej umiestnenie na heap  int x = 100; object obj = x;

14 YOUR LOGO Unboxing  object obj = 100; int x = (int)obj;

15 YOUR LOGO Pole  Pole je referenčný typ  Všetky elementy musia byť rovnakého typu  Pole začína od 0

16 YOUR LOGO Pole  Deklarácia a inicializácia -int[] array1; -int[] array2 = new int[3]; -int[] array3 = new int[3] { 0, 1, 2 }; -int[] array4 = new int[] { 3, 4, 5 };

17 YOUR LOGO Jagged Array  Jagged array – pole ukazateľov na polia  int[][] array1 = new int[3][] {new int[3]{1,2,3}, new int[4]{4,5,6,7}, new int[5]{8,9,10,11,12}};

18 YOUR LOGO Podmienky  IF Else  Case  return ((x == 0) ? "Hello" : "Goodbye")

19 YOUR LOGO Foreach  int[] numbers = {1,4,9,16}; foreach( int i in numbers ) { Console.WriteLine(" {0}", i); }

20 YOUR LOGO Řetězce  Řetězce jsou implementovány primitivním referenčním typem String -tento typ je nezměnitelný - jeho hodnoty jsou uloženy ve speciálních tabulkách (ne na haldě) -jejich identita je dána obsahem  jsou vždy inicializovány literálem, jejich konstruktor se nedá volat  všechny operace se chovají tak, že vrátí nový řetězec místo, aby změnily stav stávajícího

21 YOUR LOGO Řetězce  chovají se jako kolekce typu System.Char – implementují IEnumerable, mají indexer  základní řetězcové operace – Concat, Substring, Replace, Insert, ToUpper,...  přetížené operátory - + (konkatenace), == (porovnání obsahů), != (různost obsahů), = (kopíruje obsah řetězce do jiného řetězce)

22 YOUR LOGO StringBuilder  StringBuilder -konstruktorem se vytvoří základní buffer o 16 bytech, který se prodlužuje a zkracuje podle potřeby -StringBuilder sb1 = new StringBuilder();sb1 = "First string";StringBuilder sb2 = new StringBuilder("Second string");

23 YOUR LOGO String vs StringBuilder Počet konkatenací Optimum StringBuilder String

24 YOUR LOGO Operácie StringBuilder MethodDescription and Example Append StringBuilder sb2 = new StringBuilder("Second string"); sb2.Append(" Third string"); Insert StringBuilder sb2 = new StringBuilder("Second string"); sb2.Insert(0,"First string "); Remove StringBuilder sb2 = new StringBuilder("Second string"); sb2.Remove(12,6); Replace StringBuilder sb3 = new StringBuilder("I love cats"); sb3.Replace("cat","dog"); ToString StringBuilder sb1 = new StringBuilder("Click Me..."); button1.Text = sb1.ToString();

25 YOUR LOGO Výjimky  Chybové stavy jsou řešeny většinou pomocí výjimek – při výjimce se přeruší vykonávání kódu, vytvoří se objekt obsahující informace a hledá se někdo, koho to zajímá (v krajním případě uživatel aplikace)  speciální konstrukce v jazyce umožňují vyjádřit zájem na daném místě kódu převzít informaci o výjimce a nějak ji zpracovat

26 YOUR LOGO Třídy výjimek  Informace o výjimce se předávají prostřednictví speciálních tříd, které dědí od třídy System.Exception  tato poskytuje základní vlastnosti a kořen hierarchie  vlasnosti – Message, Source, StackTrace, TargetSite, InnerException  slovník Data – dodatečné informace jako dvojice klíč hodnota (může je přidávat i uživatel)

27 YOUR LOGO System.Exception  má čtyři konstruktory -defaultní bez parametrů -s jedním parametrem typu string -s jedním parametrem typu string a jedním typu Exception -protected konstruktor pro deserializaci  všechny vlastnosti jsou read-only

28 YOUR LOGO Hierarchie výjimek

29 YOUR LOGO Chytání výjimek  konstrukce try blok catch blok finally blok  kód se vykonává 1.vykonává se try blok a pokud se dojde na jeho konec, předá se řízení do finally 2.pokud dojde k výjimce přeskočí se na začátek příslušného catch bloku a pak se pokračuje jako v 1. 3.vykoná se finally blok

30 YOUR LOGO Chytání výjimek  je možné vynechat catch blok nebo finally blok, ale ne oba  příkaz catch může být specifický – pak je tvaru catch (typ [identifikátor])  platí, že při vzniku výjimky se řízení předá do prvního specifického bloku catch, jehož typ je typem vytvořeného objektu výjimky.  typ musí být odvozen od System.Exception

31 YOUR LOGO Chytání výjimek  obvykle za sebe řadíme specifické catch bloky se vzrůstající obecností  pokud není výjimka zachycena ve funkci, kde vznikla nebo je znovu vyhozena, je předána nadřízené funkci, to se děje tak dlouho dokud není zpracována  v krajním případě je předána runtimu, který ji zpracuje tak, že ukončí běh programu a uživatele informuje o výjimce, která nebyla v programu zpracována.

32 YOUR LOGO Vnořené bloky try  je možné do sebe bloky try vnořovat : try { //A try { //B } catch { //C } finally { //uklid } //D } catch { // osetreni chyb }

33 YOUR LOGO Příkaz throw  Výjimku je možné vygenerovat pomocí příkazu throw vyjimka  vyjimka je jakýkoliv výraz, který je typu odvozeného od System.Exception  typicky se použije výraz s operátorem new nebo reference na předpřipravený objekt výjimky throw new Exception(“Vyjimka“);  bez parametru slouží k přeposlání výjimky dál (částečné zpracování)  pokud vyhazujeme výjimku v catch bloku, použijeme vlastnost InnerException třídy System.Exception k uložení výjimky, kterou jsme zpracovávali

34 YOUR LOGO Bloky finally  kód v nich se provede vždy, i když došlo v bloku try k výjimce  používají se k úklidu (zavření souborů a podobně) a jiným nezbytným akcím  místo dvojice try...finally, kde se v bloku try alokují zdroje a v bloku finally uvolňují lze použít konstrukci

35 YOUR LOGO Príklad komplexného ošetrenia Exception

36 YOUR LOGO Regulární výrazy  jsou reprezentovány třídou System.Text.RegularExpressions.RegEx  jsou to speciální řetězce, které slouží k vyhledávání a nahrazování podřetězců v jiných řetězcích  jsou kompatibilní s PERL5 regulárními výrazy

37 YOUR LOGO Regulární výrazy  základní typ je prostě podřetězec – “abab”, najde řetězec, obsahující právě tyto znaky v tomto pořadí  lze vytvářet složitější typy vkládáním speciálních znaků  například znaky pro polohu v řetězci ^, $ - začátek a konec řádku, \z – konec řetězce, \b – začátek slova, např “^abc$”

38 YOUR LOGO Regulární výrazy  znaky pro speciální znaky – -\t – tab, \n – newline, \u0020 – unicodový znak s číslem 32 např. “^ab\u0022\n”  znaky pro opakování – píší se za znak a určují, že se musí(může) v příslušném řetězci opakovat a kolikrát – -*(0 nebo více), +(1 nebo více), ?(0 nebo 1), {n}, {n,}, {n,m} (n, n nebo více, mezi n a m) -normálně je hladové (hledá nejdelší podřetězec), přidáním dalšího otazníku se změní na líné (nejkratší)

39 YOUR LOGO Regulární výrazy  znaky pro typy znaků – pokud je na příslušné pozici znak z příslušného seznamu nebo příslušného typu -. – jakýkoliv jeden znak, x|y – znak x nebo y, [xyz] – kterýkoliv z x, y a z, [a-z] – rozsah -typy - \d – číslice, \D nečíslice, \s – whitespace ap. http://www.exforsys.com/tutorials/csharp/regular-expressions-and-csharp-.net.html

40 YOUR LOGO Regex objIntPattern=new Regex("^-[0-9]+$|^[0-9]+$"); Matches/Match string t14 = " test 1 test 2.3 test 47 "; string p14 = @"(\d+\.?\d*|\.\d+)"; MatchCollection mc14 = Regex.Matches(t14, p14); Regular Expression Library: http://www.codeproject.com/KB/recipes/regexlibbuilder.aspx

41 YOUR LOGO System.Convert

42 YOUR LOGO Vstup a výstup – souborový systém  BCL obsahuje množství tříd, které umožňují pracovat se souborovým systémem  jsou ve jmenném prostoru System.IO  základní třídy jsou FileSystemInfo, FileInfo, DirectoryInfo a DriveInfo. Reprezentují různé prvky systému souborů.

43 YOUR LOGO Práce se soubory a adresáři  FileInfo a DirectoryInfo mají konstruktor, kterému se předá cesta k souboru nebo k adresáři  mají instanční metody, které implementují operace na souborovém systému – kopírování, vytváření, přesouvání, otvírání a podobně  existují třídy File a Directory, které poskytují stejnou funkcionalitu, ale jejich příslušné metody jsou statické a cesty k souborům se jim předávají jako parametry

44 YOUR LOGO Třída Path  pomocná třída pro práci s řetězci obsahujícími cesty k souborům  metody jako ChangeExtension, GetExtension, GetPathRoot, HasExtension – pracují s řetězcem cesty  metoda GetTempFileName – založí dočasný soubor a vrátí cestu k němu

45 YOUR LOGO FileSystemWatcher  třída, která umožňuje sledovat změny v daném adresáři  má konstruktor, kterému předáme cestu k adresáři  má vlastnost Filter, která obsahuje masku, jaké soubory se mají sledovat  vlastnost NotifyFilter určuje, které události se mají sledovat  události Changed, Created, Deleted a Renamed typu FileSystemEventHandler

46 YOUR LOGO Vstup a výstup  je prováděn pomocí proudů (stream)  proud je posloupnost hodnot, která může být potenciálně ukončena  v BCL jsou proudy implementovány pomocí abstraktní třídy System.IO.Stream, která zajišťuje základní operace na abstraktním proudu (čtení (read), psaní (write), posun kursoru (seek), timeout)

47 YOUR LOGO Stream – vlastnosti a metody  CanRead, CanSeek, CanWrite, CanTimeout – podporuje daný proud čtení, psaní, vyhledávání, timeout?  Length, Position – délka v bytech, poloha virtuálního kurzoru v rámci proudu  metody Read, ReadByte – načtení více, jednoho bytu a posun ukazatele  metody Write, WriteByte – zápis více nebo jednoho bytu a posun ukazatele  Seek – nastavení pozice na dané místo (parametry offset a začátek hledání)  Flush – vyprázdní proud na zařízení nebo do základního proudu

48 YOUR LOGO FileStream  základní třída pro čtení z a zápis do souboru, podporuje čtení a zápis bytů  oproti Stream podporuje navíc metody Lock a Unlock, které zakazují jiným procesům číst a zapisovat do souboru  podporuje zápis, čtení i seek Seek(Int64 offset, SeekOrigin origin)

49 YOUR LOGO StreamReader(Writer)  třídy pro zápis a čtení znaků  všechny čtecí metody vracejí řetězce nebo pole řetězců  třídy jsou dvě – jedna pro čtení a jedna pro zápis  StreamReader – operace Peek, Read(Block|Line|ToEnd)  StreamWriter – Write, WriteLine

50 YOUR LOGO Kódování  tyto proudy navíc podporují kódování znaků  kódování je reprezentováno třídou System.Text.Encoding a představuje způsob, jak abstraktní text zaznamenat v paměti počítače  třída Encoding má vlastnosti vracející nejčastější kódování ( ASCII, Unicode, UTF32 ) a statickou metodu GetEncoding(string), která vrátí kódování reprezentované řetězcem (např. windows- 1250 )

51 YOUR LOGO Kódování  oba znakové proudy mají konstruktor, kterému je možné předat kódování StreamWriter sw = new StreamWriter(file, Encoding.UTF7);  defaultní je Unicode, u čtení není obvykle nutné kódování uvádět, pokud se jedná o běžné unicodové typy  třída Encoding má metodu GetBytes, která běžný řetězec převede na pole bytů v příslušném kódování

52 YOUR LOGO Vytváření proudů  FileStream vrací metoda Open třídy File, je ale třeba nastavit vhodná práva a mód -módy – FileMode.(Open, Create, CreateNew, Append, OpenOrCreate) -práva – FileAccess.(Read, ReadWrite, Write) -je možno použít metodu OpenWrite k otevření exitujícího souboru k zápisu a OpenRead ke čtení  jméno souboru je možno předat i přímo konstruktoru třídy FileStream

53 YOUR LOGO Vytváření proudů  Třída File má také celou řadu metod, jejichž jména končí na Text, a které vracejí příslušný StreamReader nebo Writer s nastaveným kurzorem a právy -ke čtení OpenText -k zápisu AppendText, CreateText  některé metody také úplně odstiňují vytváření proudů – ReadToEnd, WriteAllText

54 YOUR LOGO Základní a adaptérové proudy  proudy lze navazovat na sebe, první čte přímo z externího zařízení každý další pak z předchozího (a každý přidává nějakou zvláštní vlastnost)  je to vlastně opět způsob jak přidat vlastní chování k existující třídě  typické adaptérové třídy jsou readry a writery (např. StreamReader přidává schopnost číst a rozeznávat znaky)  adaptérový proud navážeme na základní tak, že základní předáme konstruktoru adaptérového

55 YOUR LOGO Adaptérové proudy  Typicky, zápis do souboru : -vytvoření základního proudu FileStream fs = new File.Create(cesta); -vytvoření proudu pro zápis StreamWriter sw = new StreamWriter(fs); -práce s writerem sw.WriteLine(“Zapiseme retezec”); -zavření obou proudů sw.Close(); fs.Close();

56 YOUR LOGO Další základní proudy  Zatím jsme viděli základní proud pro práci se souborem – FileStream  další proudy pracují nad jiným zdrojem – MemoryStream, NetworkStream  mohou se lišit funkčností podle charakteru příslušného zařízení - MemoryStream neumí timeout, ale umí seek - NetworkStream naopak  StringReader – nad Stringem, StringWriter – nad StringBuilderem

57 YOUR LOGO Další adaptérové proudy  Zatím jsme potkali StreamReader a Writer pro zápis/čtení znaků  BufferedStream – slouží ke zvýšení výkonu, používá vyrovnávací paměť pro čtení a zápis  BinaryReader a Writer – zápis a čtení binárních (např. strukturovaných) dat -přetížená metoda Write BinaryWriter u -metody ReadJmenoTypu (např. ReadInt64 ) BinaryReader u

58 YOUR LOGO Adaptérové proudy  GZipStream a DeflateStream – komprese dat v proudech metodami ZIP a DEFLATE -data se komprimují a dekomprimují prostě zápisem do a čtením z těchto proudů -konstruktor má kromě základního proudu ještě parametr typu enum CompressionMode.(Compress | Decompress)


Stáhnout ppt "YOUR LOGO Dátové typy, Stream, StringBuilder,...."

Podobné prezentace


Reklamy Google