F1. Hasznos táblázatok F1.1 C# kulcsszavak abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while Szövegkörnyezet-függő kulcsszavak (speciális jelentést hozdoznak a kódban, azonban nem foglalt szavak.) from get group into join let orderby partial (típus) partial (metódus) select set value where (generikus típus elem) where (lekérdezés záradék) yield 1
F1. FÜGGELÉK F1.2 Előre definiált egyszerű és referencia-típusok Egész típusok Típus.NET típus Ábrázolás Értékkészlet Értékutótag sbyte System.Sbyte 8-bites, előjeles -128 127 byte System.Byte 8-bites, előjel nélküli 0 255 short System.Int16 16-bites, előjeles -32768 32767 ushort System.Uint16 16-bites, előjel nélküli char System.Char 16-bites, előjel nélküli, Unicode 0 65535 '\u0000' '\uffff' int System.Int32 32-bites, előjeles -2147483648 2147483647 uint System.Uint32 32-bites, előjel nélküli 0 4294967295 u, U long System.Int64 64-bites, előjeles -9223372036854775808 9223372036854775807 ulong System.Uint64 64-bites, előjel nélküli Lebegőpontos típusok l, L 0 18446744073709551615 ul, UL lu, LU Típus.NET típus Ábrázolás Értékkészlet Pontoság (jegy) Értékutótag float System.Single 32-bites ±1.5 10 45 ±3.4 10 38 7 f, F double System.Double 64-bites ±5.0 10 324 ±1.7 10 308 15-16 (d, D) decimal System.Decimal 128-bites ±1.0 10 28 ±7.9 10 28 28-29 m, M Logikai típus Típus.NET típus Ábrázolás Értékkészlet bool System.Boolean 8-bites true, false 2
HASZNOS TÁBLÁZATOK Referencia típusok Típus.NET típus Leírás object string System.Object Minden előre definiált és felhasználó által készített típus a System.Object osztálytól származik. System.String Nem módosítható unicode karaktersorozatok típusa. F1.3 Escape karakterkódok Escape Jelentés Unicode kódolás \a vészjel 0x0007 \n új sor 0x000A \t vízszintes tabulátor 0x0009 \v függőleges tabulátor 0x000B \b visszatörlés 0x0008 \r kocsi vissza 0x000D \f lapdobás 0x000C \\ fordított perjel 0x005C \' aposztróf 0x0027 \" idézőjel 0x0022 \0 nulla 0x0000 \xdddd Unicode karakter 0xdddd \udddd Unicode karakter 0xdddd \Udddddddd Unicode karakter 0xdddddddd F1.4 C# utasítások Kategória Szelekciós utasítások Iterációs utasítások Vezérlésátadó utasítások Kivételkezelő utasítások A checked és az unchecked utasítások fixed utasítás lock utasítás C# kulcsszavak if, else, switch, case do, for, foreach, in, while break, continue, default, goto, return, yield throw, try-catch, try-finally, try-catch-finally checked, unchecked fixed lock 3
F1. FÜGGELÉK F1.5 C# műveletek Műveletek csoportosítása Operátorok csoportja Műveleti jelek Aritmetikai + - * / % Logikai (feltételes és bitenkénti) & ^ ~! && true false Karaktersorozatok összekapcsolása + Növelés, csökkentés (léptetés) ++ -- Biteltolás << >> Összehasonlító ==!= < > <= >= Értékadás = += -= *= /= %= &= = ^= <<= >>= Tagelérés. Indexelés [] Típus-átalakítás () Feltételes?: Delegált hozzáadása és levétele + - Objektum-létrehozás new Típusinformáció as is sizeof typeof Túlcsordulás-kivétel vezérlése checked unchecked Indirektség és cím * -> [] & Különleges?? => Információk az operátorok túlterheléséhez Műveleti jel Túlterhelhetők +, -,!, ~, ++, --, true, false igen +, -, *, /, %, &,, ^, <<, >> igen ==,!=; <, >; <=, >= igen (azonban csak páronként) &&, nem [] nem (azonban indexelők készíthetők) () nem (azonban új típus-átalakító operátor létrehozható: explicit/implicit) +=, -=, *=, /=, %=, &=, =, ^=, <<=, >>= nem =,.,?:, ->, new, is, as, sizeof, typeof nem 4
HASZNOS TÁBLÁZATOK Az operátorok precedenciája Műveletek Asszociativitás Operators elsődleges balról-jobbra x.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked, -> egyoperandusú balról-jobbra +, -,!, ~, ++x, --x, (T)x, true, false, &, sizeof multiplikatív balról-jobbra *, /, % additív balról-jobbra +, - biteltoló balról-jobbra <<, >> összehasonlító és balról-jobbra <, >, <=, >=, is, as, típustesztelő azonosságvizsgálat balról-jobbra ==,!= logikai ÉS balról-jobbra & logikai kizáró VAGY balról-jobbra ^ logikai VAGY balról-jobbra feltételes ÉS balról-jobbra && feltételes VAGY balról-jobbra feltételes jobbról-balra?: értékadó és lambda jobbról-balra =, +=, -=, *=, /=, %=, &=, =, ^=, <<=, >>=,??, => Implicit (automatikusan végrehajtódó) numerikus típus-átalakítások Honnan sbyte byte short ushort int uint long char float ulong Hová short, int, long, float, double vagy decimal short, ushort, int, uint, long, ulong, float, double vagy decimal int, long, float, double vagy decimal int, uint, long, ulong, float, double vagy decimal long, float, double vagy decimal long, ulong, float, double vagy decimal float, double, vagy decimal ushort, int, uint, long, ulong, float, double vagy decimal double float, double vagy decimal 5
F1. FÜGGELÉK F1.6 C# módosítók Módosító Használva Jelentés abstract osztály metódus tulajdonság indexelő, esemény Implementálatlan tagokat tartalmaz, nem példányosítható. Metódus, tulajdonság, indexelő és esemény esetén az implementálás hiányát jelzi az abstract osztályban. delegate metódusfej Módosítóként metódus-hivatkozás (delegált) típusának készítése során használjuk. explicit operátor A kulcsszót a felhasználó által definiált típus explicit (típus-átalakítási előírását igénylő) konverziót megvalósító operátorának készítése során használjuk. extern metódus Külső (általában natív) definilálású metódus. implicit operátor A kulcsszót a felhasználó által definiált típus implicit (automatikus, adatvesztés nélküli) konverziót megvalósító operátorának készítése során használjuk. internal típus, tag A típus, valamint az osztály-, illetve struktúratag csak az aktuális szerelvényből (assembly) érhető el. new tag Akkor használjuk, ha a származtatott osztályban el kívánjuk rejteni az alaposztály (base) örökölt elemeit. (Ez ugyan alapértelmezés, azonban üzenet figyelmeztet a new módosító alkalmazására.) override partial metódus tulajdonság indexelő, esemény osztály struktúra, interfész metódus Szükséges az örökölt virtuális vagy absztrakt osztályelem (metódus, tulajdonság, indexelő vagy esemény) lecseréléséhez (bővítéséhez, módosításához). Az megadott típus (class, struct vagy interface) definícióját több állományba helyezhetjük. Segítségével a metódus lenyomatát (fejlécét) és az implementációját különböző résztípusokba helyezhetjük. private tag Csak a tagot definiáló osztályon/struktúrán belül érhető el. (Alapértelmezett elérési mód a class és a struct típusokban.) protected protectedinternal tag tag, tulajdonság set része Csak a tagot definiáló osztályból, illetve az osztályból származtatott osztályokból érhető el. (Struktúrában nem használható.) Az osztálytag csak az aktuális szerelvényből (assembly), illetve az osztályból származtatott típusból érhető el. 6
HASZNOS TÁBLÁZATOK Módosító Használva Jelentés public tag Mindenhonnan elérhető, ahonnan a tagot tartalmazó osztály elérhető nincs korlátozás. (Alapértelmezett elérési mód az enum és az interface típusokban.) readonly adatmező A readonly adatmező a deklarációban, illetve a tartalmazó osztály konstruktorában kaphat értéket. sealed osztály Nem lehet alaposztály a sealed osztály, így nem származtatható belőle új osztály. static virtual osztály metódus adatmező tulajdonság, operátor, esemény, konstruktor. metódus tulajdonság indexelő, esemény A static deklarálású osztály minden tagjának statikusnak kell lennie. A statikus tagok a típushoz (class, struct) tartoznak, így közösek az osztály példányai számára. A static kulccszó nem használható indexelőkhöz, destruktorokhoz, illetve nem class típusokhoz. A megadott osztályelem (metódus, tulajdonság, indexelő és esemény) a származtatott osztályban lecserélhető (override). volatile adatmező Több, egyidejűleg futó szállból módosítható a mező tartalma. F1.7 C# előfordító direktívák Direktíva #if kifejezés #else #elif kifejezés #endif #define név #undef név #warning szöveg #error szöveg #line sorszám ["fájlnév"] hidden default #region név #endregion név Leírás feltételes fordítás, feltételes fordítás, feltételes fordítás, feltételes fordítás, szimbólum definiálása, szimbólum definiáltságának megszüntetése, fordítási figyelmeztetés létrehozása, fordítási hiba előállítása, fordítói üzenetekben a sorszám (és a fájlnév) módosítása, kinyitható és bezárható forráskódrészlet kijelölése (eleje), kinyiható és bezárható forráskódrészlet kijelölése (vége). 7
F1. FÜGGELÉK F1.8 Az object osztály metódusai Metódus public object() public virtual bool Equals(object obj) public static bool Equals(object A, object B) protected virtual void Finalize() public Type GetType() public virtual int GetHashCode() protected object MemberwiseClone() Leírás konstruktor, megvizsgálja, hogy a megadott objektum azonos-e az aktuális objektummal, megvizsgálja, hogy a megadott objektumok azonosak-e, a garbage collection (szemétgyűjtés) során, az objektumpéldány törlése előtt meghívódó metódus, visszadja az objektum futásidejű osztályát, megadja az objektum hash-kódját, elkészíti az objektum sekély (shallow) másolatát, tagonként másolva annak elemeit, public static bool ReferenceEquals(object A, object B); megvizsgálja, hogy a megadott objektumpéldányok hivatkozása megegyezik-e, public virtual string ToString() az objektum szöveges reprezentáiójával tér vissza, F1.9 C# formázási lehetőségek Az alábbi formátumokat a Console osztály kiíró metódusaiban (Write(), WriteLine()), a String osztály Format() metódusában és az osztályok ToString() metódusaiban egyaránt alkalmazhatjuk, A formátumelem előtt, kettősponttal elválasztva a megjeleníteni kívánt argumentum sorszáma áll: int n = 122334; Console.WriteLine("{0:D} = {1:X}", n, n); Console.WriteLine(String.Format("{0:D} = {1:X}", n, n)); Console.WriteLine("{0} = {1}",n.ToString("D"), n.tostring("x")); // A kiírás eredménye mindhárom esetben: 122334 = 1DDDE Fontos megjegyezni, hogy formázás eredménye függ a Windows területi beállításaitól (tizedes vessző, pénznem, dátum és idő stb.). 8
HASZNOS TÁBLÁZATOK F1.9.1 Számok formázása Alapvető számformázási előírások: Előírás Típus Formátum Példa (12.23D) Példa (1223) c, C Pénzügyi {0:c} 12,23 Ft 1 223,00 Ft d, D Decimális (egész szám) {0:d} FormatException 1223 e. E Tudományos {0:e} 1,223000e+001 1,223000e+003 f, F Fixpontos {0:f} 12,23 1223,00 g, G Általános {0:g} 12,23 1223 n, N Szám ezres tagolóval {0:n} 12,23 1 223,00 r, R Kerekített {0:r} 12,23 FormatException p, P Százalék {0:p} 1 223,00 % 122 300,00 % x, X Hexadecimális {0:x} {0:X} FormatException FormatException A formátumok többségében a pontosságot is megadhatjuk: Előírás Típus Formátum Példa (12.23D) Példa (1223) c, C Pénzügyi {0:c7} 12,2300000 Ft 1 223,0000000 Ft d, D Decimális (egész {0:d7} FormatException 0001223 szám) e. E Tudományos {0:e7} 1,2230000e+001 1,2230000e+003 f, F Fixpontos {0:f7} 12,2300000 1223,0000000 g, G Általános {0:g7} 12,23 1223 n, N Szám ezres tagolóval {0:n7} 12,2300000 1 223,0000000 r, R Visszaállítható {0:r7} 12,23 FormatException p, P Százalék {0:p7} 1 223,0000000 % 122 300,0000000 % x, X Hexadecimális {0:x7} {0:X7} FormatException FormatException 00004c7 00004C7 4c7 4C7 9
F1. FÜGGELÉK A mezőszélesség-előírás csak akkor érvényesül, ha az eredmény elfér a mezőben. Negatív mezőszélesség megadásakor a szám a mező bal széléhez igazodik. Előírás Típus Formátum Példa (12.23D) Példa (1223) c, C Pénzügyi {0,12:c7} 12,2300000 Ft 1 223,0000000 Ft d, D Decimális (egész szám) {0,12:d7} FormatException 0001223 e. E Tudományos {0,12:e7} 1,2230000e+001 1,2230000e+003 f, F Fixpontos {0,12:f7} 12,2300000 1223,0000000 g, G Általános {0,12:g7} 12,23 1223 n, N Szám ezres tagolóval {0,12:n7} 12,2300000 1 223,0000000 r, R Visszaállítható {0,12:r7} 12,23 FormatException p, P Százalék {0,12:p7} 1 223,0000000 % 122 300,0000000 % x, X Hexadecimális {0,12:x7} {0,12:X7} FormatException FormatException 00004c7 00004C7 Kötetlen számformázás: Előírás Típus Formátum Példa Megjegyzés (1223.79D) 0 0 vagy dec. jegy {0:00.0000} 1223,7900 Feltölti nullákkal # Decimális jegy {0:(#).##} (1223),79. Tizedespont {0:0.0} 1223,8, Ezres elválasztó {0:0,0} 1 224 Két 0 között kell megadni.,. Számskálázás {0:0,.} 1 Ezerrel osztva.. % Százalék {0:0%} 122379% 100-zal szorozva és % jel. e A kitevő helye {0:00e+0} 12e+2 ; Csoportelválasztó {0:#0.00;(#0.00);Nulla} Az első csoport pozitív, a második negatív, míg a harmadik 0 esetén érvényesül. Néhány példa: String.Format("{0:(##-#)-####-###}", 3613751564) (36-1)-3751-564 String.Format("{0:#0.0##%}", 0.23) 23,0% String.Format("{0:000.0###E+000}", 1223.7919) 122,3792E+001 10
HASZNOS TÁBLÁZATOK F1.9.2 Dátum és idő formázása Alapvető formázási előírások: Előírás Típus Formátum DateTime.Parse(@"23 Dec 2007 7:35:00")) d Rövid dátum {0:d} 2007.12.23. D Hosszú dátum {0:D} 2007. december 23. t Rövid idő {0:t} 7:35 T Hosszú idő {0:T} 7:35:00 f Teljes dátum és idő {0:f} 2007. december 23. 7:35 F Teljes dátum és idő (hosszú) {0:F} 2007. december 23. 7:35:00 g Alapértelmezett dátum és idő {0:g} 2007.12.23. 7:35 G Alapértelmezett dátum és idő {0:G} 2007.12.23. 7:35:00 (hosszú) M, m Hónap-nap {0:M} december 23. R, r RFC1123 dátumsztring {0:r} Sun, 23 Dec 2007 07:35:00 GMT s Rendezhető dátumsztring {0:s} 2007-12-23T07:35:00 u Univerzális rendezhető, helyi {0:u} 2007-12-23 07:35:00Z idő U Univerzális GMT {0:U} 2007. december 23. 6:35:00 Y, y Év-hó {0:Y} 2007. december Kötetlen formázás: Előírás Típus Formátum Mint a fenti táblázatban dd nap {0:dd} 23 ddd napnév {0:ddd} V dddd teljes napnév {0:dddd} Vasárnap gg, korszak {0:gg} i.sz. hh óra 2 jegyen {0:hh} 07 HH óra 2 jegyen, 24-órás formátum {0:HH} 07 mm perc 00-59 {0:mm} 35 MM hónap 01-12 {0:MM} 12 MMM hónap-rövidítés {0:MMM} dec. MMMM teljes hónapnév {0:MMMM} december 11
F1. FÜGGELÉK Előírás Típus Formátum Mint a fenti táblázatban ss másodperc 00-59 {0:ss} 00 tt de vagy du {0:tt} de. yy év, 2 jegyen {0:yy} 07 yyyy év {0:yyyy} 2007 zz időzóna eltolás,2 jegyen {0:zz} +01 zzz teljes időzóna eltolás, {0:zzz} +01:00 : időtagoló {0:hh:mm:ss} 07:35:00 / dátumtagoló {0:yyyy/MM/dd.} 2007.12.23. F1.9.3 Felsorolások formázása Előírás Típus G, g Alapértelmezés (az elemnév jelenik meg, ha elérhető, különben pedig az elem értéke) F, f Mindig az elemnév jelenik meg. D, d Mindig az egész értéke llátható. X, x 8-jegyű hexadecimális szám formájában az elem értéke jelenik meg.. F1.10.NET reguláris kifejezések alapelemei Művelettípus Példa Leírás Literál karakterek, melyekkel pontos egyezés szükséges. Rögzítők és előfeltételezések. a A n 7 % @ \$ \^ \+ \\ \? \ Pontos egyezés betűkkel, számjegyekkel és sok egyéb larakterrel. Más karakterek előtt álló \ törli a karakter speciális regex jelentését. \n \t \r Új sor, tabulátor, kocsi vissza stb.literálok. \cj \cg ASCII-vezérlőkarakterek. \0123 Oktális kódjával megadott ASCII-karakter. \x4f Hexadecimális kódú ASCII-karakter. \u04c7 ^kif kif$ \b \B Hexadecimális kódjával megadott unicodekarakter. A kif -el kezdődik. A kif -el végződik. Szóhatáron, NEM szóhatáron. 12
HASZNOS TÁBLÁZATOK 4 Művelettípus Példa Leírás Karaktercsoportok - bármely (1 darab) karakter a csoportból. A megelőző elemre vonatkozó mennyiségjelző. [aneeiot] A listában szereplő bármely karakter. [^aneeiot] Bármely karakter, amely nem szerepel a listában. [a-na-n0-9] A karaktertartományokban szereplő bármely karakter.. A pont helyén bármely karakter szereplehet (bizonyos esetekben nem lehet új sor). \s Bármely tagoló (whitespace) karakter (szóköz \n \r \t \f \v). \w Bármilyen szókarakter (betű, számjegy vagy _). \d Bármely számjegy (0-tól, 9-ig). Tetszőleges, NEM tagoló, szó- vagy számjegykarakter. \S \W \D + 1 vagy több ("néhány"). * 0 vagy több ("talán néhány").? 0 vagy 1 ("talán egy ") {7} Pontosan 7. {7,} 7 vagy több. {12,23} 12 és 23 közötti számú. Alternatíva. Valamelyik, vagy. ( ) Nem nevesített csoport. Csoportosítás (? ) Nevesített csoport. (?: ) Nem tárolt csoport. Az alábbi példában rendszámellenőrzést végzünk reguláris kifejezés felhasználásával: System.Text.RegularExpressions.Match m; string s = "NAT-123"; string r1 = @"[A-Z][A-Z][A-Z]-\d"; string r2 = @"[A-Z]{3}-\d"; m = System.Text.RegularExpressions.Regex.Match(s, r1); Console.WriteLine("{0}endszám: {1}", (m.success)? "R" : "Nem r", s); m = System.Text.RegularExpressions.Regex.Match(s, r2); Console.WriteLine("{0}endszám: {1}", (m.success)? "R" : "Nem r", s); 13