C nyelvi ttekint A Programozs C nyelven Ills

  • Slides: 42
Download presentation
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)” könyv 2008 -as kiadásának nyomdokain…

C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)” könyv 2008 -as kiadásának nyomdokain… Az alábbi diákon felvetődő számok, a könyvbeli oldalszám(oka)t jelölik.

Változók / állandók (32 -34) Változók/állandók definiálása char ch; int egy, tizenegy; const float

Változók / állandók (32 -34) Változók/állandók definiálása char ch; int egy, tizenegy; const float g=9. 81; // valós konstans g=2. 3; // !! HIBA const int min = 0; // egész konstans Változók inicializálása char s = ’a’; int []a = {1, 2, 3}; char[]b = „Egy”;

Elemi típusok (34 -39) char (2 byte -> unikód ábrázolás) char c = ’a’;

Elemi típusok (34 -39) char (2 byte -> unikód ábrázolás) char c = ’a’; string fontosabb operátorok: +, +=, @ [] a string indexelése: pl. "szia"[1] = z // read-only. @”C: programokalma. txt” -> érzékeny karakterek fontosabb függvények… később Érdekesség: string s = „vmi” + a; // a integer (a –ra a To. String meghívódik ilyenkor)

Elemi típusok (34 -39) int (4 byte) long (8), short (2), sbyte, float (4),

Elemi típusok (34 -39) int (4 byte) long (8), short (2), sbyte, float (4), double (8), decimal (16) u előjel: unsigned, nem előjeles uint, ulong, ushort, byte void (fv. visszatérő paramétere) bool (1 byte) true/false http: //msdn. microsoft. com/enus/library/s 1 ax 56 ch(v=vs. 110)

Egy operandusú operátorok (45 -46) new int[]a; a = new int(); // egy egész

Egy operandusú operátorok (45 -46) new int[]a; a = new int(); // egy egész számára elegendő hely foglalás a = new int[5]; // 5 egész szám !, ++, - a = ++b -> // hatása: b=b+1; a=b; // b=3 akkor b=4 és a = 4 a = b++ -> // hatása: a=b; b=b+1; // b = 3 akkor b=4 és a =3

Egy operandusú operátorok (45 -46) (típus) kifejezés // típuskényszerítés (cast) int a = (int)9.

Egy operandusú operátorok (45 -46) (típus) kifejezés // típuskényszerítés (cast) int a = (int)9. 81 F; Console. Write. Line(a); // 9 Másik lehetőség a konvertálásra int a = int. Parse("1"); // a = 1 int b = Convert. To. Int 32("1"); // b = 1

Convert. To. CTSTípusnév A Convert használható minden gyakori típus átkonvertálásához. Létezik Convert. To. Int

Convert. To. CTSTípusnév A Convert használható minden gyakori típus átkonvertálásához. Létezik Convert. To. Int 32() … Convert. To. Float() CTS = Common Type System CTS Boolean, Int 16, Int 32, Int 64, Float, Double, String, Decimal, Byte, Char

Két operandusú operátorok (46 -52) *, /, % (maradékképzés) +, i is int //

Két operandusú operátorok (46 -52) *, /, % (maradékképzés) +, i is int // i az int típusból van-e létrehozva var a = 16; if (a is int) { Console. Write. Line("Szám!"); } if (a is String) { Console. Write. Line("Szöveg!"); } i as int // két operandusú típuskényszerítés (csak referenciákra és nullablekre)

Egyéb operátorok (52 - 56) Három operandusú e 1 ? e 2 : e

Egyéb operátorok (52 - 56) Három operandusú e 1 ? e 2 : e 3 Két operandusú értékadó operátorok: +=, -=, *= Továbbiak: http: //msdn. microsoft. com/en-us/library/6 a 71 f 45 d

Adattípusok, Tömbök (57 -61) int[]numbers; // vektordefiníció numbers = new int[10]; numbers = new

Adattípusok, Tömbök (57 -61) int[]numbers; // vektordefiníció numbers = new int[10]; numbers = new int[20]; // automatikus szemétgyűjtés Kézzel inicializált tömb: int[] n = {3, 4, 5, 6}; int[] n = new int[]{3, 4, 5, 6}; int[]n = new int[4]{3, 4, 5, 6}; Logikai vektor automatikus elemei: false, Referencia vektor-é : null Továbbá: Multidimenziós vektor, Vektorok vektora, …

Adattípusok, Struktúrák (62 -66) struct név{ <hozzáférés, alap privát> típus mezőnevek; <hozzáférés, alap privát>

Adattípusok, Struktúrák (62 -66) struct név{ <hozzáférés, alap privát> típus mezőnevek; <hozzáférés, alap privát> függvénydefiníció; } Hozzáférési szintek: private, public, internal (assemblyn belül érhető el)

Adattípusok, Struktúrák (62 -66) Fontos megjegyezni: 1. Nem lehet struktúrából származtatni 2. Nem lehet

Adattípusok, Struktúrák (62 -66) Fontos megjegyezni: 1. Nem lehet struktúrából származtatni 2. Nem lehet a mezőket deklaráláskor inicializálni 3. Van beépített, default konstruktor (paraméter nélkül) de az sem inicializálja a mezőket. (saját kell) 4. Bár érték típusú a struktúra, ha saját konstruktorral szeretnénk inicializálni, azért a new operátorral kell létrehozni. Bár ekkor is a vermen (stack) fog tárolódni.

Struktúra példa struct Pont { public int x; public int y; } Pont p;

Struktúra példa struct Pont { public int x; public int y; } Pont p; // OK p. x = 5; p. y = 6;

Struktúra példa (2) struct Pont { private int x; private int y; } public

Struktúra példa (2) struct Pont { private int x; private int y; } public Pont(int a, int b) { x = a; y = b; } Pont p(2, 3); // HIBÁS, bár C++-ban jó lenne. Pont p = new Pont(2, 3); // OK, de így a stacken jön létre

Utasítások, kifejezések (67) Kifejezés utasítás kifejezés; Létezik a kifejezés nélküli ; utasítás, és értelme

Utasítások, kifejezések (67) Kifejezés utasítás kifejezés; Létezik a kifejezés nélküli ; utasítás, és értelme is van, például végtelen ciklus írása: for(; ; ){ // végtelen ciklus }

Elágazás utasítás (68 -69) Alapvetően: if(kifejezés){ utasítás; } else { utasítás; } Többirányú elágazás:

Elágazás utasítás (68 -69) Alapvetően: if(kifejezés){ utasítás; } else { utasítás; } Többirányú elágazás: switch(kifejezés<string|int>){ case érték 1: utasítás 1; <break|goto|return>; case érték 2: utasítás 2; <break|goto|return>; . . default: utasítás; <break|goto|return>; }

Elágazás utasítás (2) Minden elágazás végére kötelező (nem úgy mint C/C++-ban) a befejező utasítás

Elágazás utasítás (2) Minden elágazás végére kötelező (nem úgy mint C/C++-ban) a befejező utasítás (break|goto|return) ahol aktuálisan valamilyen utasításokat is közlünk a címke után.

Elágazás utasítás (3) Ha mégis több címkéhez szeretnénk valamilyen aktivitást rendelni, például így tehetjük

Elágazás utasítás (3) Ha mégis több címkéhez szeretnénk valamilyen aktivitást rendelni, például így tehetjük meg: switch (1) { case 1: case 2: Message. Box. Show("1"); Message. Box. Show("1 és 2"); break; default: break; }

Ciklusok (70 -75) While (elöl tesztelős) while(kifejezés igaz){ utasítás; } while(true) {…} // végtelen

Ciklusok (70 -75) While (elöl tesztelős) while(kifejezés igaz){ utasítás; } while(true) {…} // végtelen ciklus Do (hátul tesztelős) do{…}while(kifejezés igaz){utasítás; } do{…}while(false){utasítás} // biztosan egyszer lefut For for(int i =0; i <5; i++){ utasítás 1; . . } Foreach foreach(azonosító in vektor){ utasítás; }

Ugró utasítások (75 -82) break; A legbelső while, do, for utasítást hagyja abba (vagy

Ugró utasítások (75 -82) break; A legbelső while, do, for utasítást hagyja abba (vagy switchet). continue; Folytatja. . int i = 1; while(true){ i++; if(i<10) continue; // következő ciklusmag if(i==11) break; // Ciklus vége Console. Write. Line(i); } goto címke; NEM AJÁNLOTT, de létezik.

Egyéb utasítások (75 -82) Könyvtárak használata using névtér_vagy_osztály vagy using(objektum){utasítások; } Disposable objektumokhoz, pl

Egyéb utasítások (75 -82) Könyvtárak használata using névtér_vagy_osztály vagy using(objektum){utasítások; } Disposable objektumokhoz, pl Stream. Reader/Stream. Writer A kivételkezeléshez is kapcsolódik (később…)

Függvények Érték szerinti paraméter átadás (83) static int maxfv(int a, int b) { return

Függvények Érték szerinti paraméter átadás (83) static int maxfv(int a, int b) { return a > b ? a : b; } int c = maxfv(1, 2); Message. Box. Show(c. To. String()); // out: 2

Függvények Rekurzív függvény példa: static int factor(int a) { return ((a <= 1) ?

Függvények Rekurzív függvény példa: static int factor(int a) { return ((a <= 1) ? 1 : a * factor(a - 1)); } Érdemes meggondolni hogy milyen adattípussal számolunk/adunk vissza Ez a függvény hamar túllépi az int megengedhető tartományát (exponenciális)!

Függvények Referencia szerinti paraméter átadás (ref) (84. o. ) void csere(ref int x, ref

Függvények Referencia szerinti paraméter átadás (ref) (84. o. ) void csere(ref int x, ref int y) { int t = x; x = y; y = t; } int a = 2, b = 3; csere(ref a, ref b); // fontos a ref kulcsszó! Message. Box. Show("{0}, {1}", a, b); // out: 3, 2

Függvények Függvény eredmény paramétere (out) (85) void csere(out int x, out int y) {

Függvények Függvény eredmény paramétere (out) (85) void csere(out int x, out int y) { int t = x; x = y; y = t; } int a = 2, b = 3; csere(ref a, ref b); Message. Box. Show("{0}, {1}", a, b);

Függvények Függvény eredmény paramétere (out) (85) void osszead(int x, int y, out int osszeg)

Függvények Függvény eredmény paramétere (out) (85) void osszead(int x, int y, out int osszeg) { osszeg = x + y; } int a = 2, b = 3, c = 0; osszead(a, b, out c); Message. Box. Show("{0} ", c); // 5

Függvények Tömbök paraméterben (86) void csere(int []cserelendo) { int t = cserelendo[0]; cserelendo[0] =

Függvények Tömbök paraméterben (86) void csere(int []cserelendo) { int t = cserelendo[0]; cserelendo[0] = cserelendo[1]; cserelendo[1] = t; } int[] cserelj = {2, 3}; csere(cserelj); Message. Box. Show("{0}, {1}", cserelj[0], cserelj[1]); // 3, 2

Függvények Változó számú paraméter átadása (89 -91) void csere(params int[] list) { int t

Függvények Változó számú paraméter átadása (89 -91) void csere(params int[] list) { int t = list[0]; list[0] = list[1]; list[1] = t; } Fog-e látszani a csere a hívó fél számára?

Függvények Változó számú paraméter átadása Ekkor „rendes” paramétert is megadhatunk, de szigorúan csak a

Függvények Változó számú paraméter átadása Ekkor „rendes” paramétert is megadhatunk, de szigorúan csak a változó számú paraméter definiálása előtt. void rendez(int n, params int[] miket) void rendez(params int[] miket, int n) // hiba

Függvények túlterhelése (91 -92) Cél: Ugyanazt a funckiót ne kelljen máshogy elnevezni, csak mert

Függvények túlterhelése (91 -92) Cél: Ugyanazt a funckiót ne kelljen máshogy elnevezni, csak mert más típusokra szeretnénk végrehajtani. double maximum(double x, double y) int maximum(int x, int y)

Osztályok (102) Osztályok definiálása class Pont { private int x; // adattagok private int

Osztályok (102) Osztályok definiálása class Pont { private int x; // adattagok private int y; public Pont() { // konstruktor } } public Pont(int a, int b) { // felüldefiniált konstruktor x = a; y = b; }

Osztályok / tulajdonságok (118) Tulajdonságok class Pont { private int x; public int y;

Osztályok / tulajdonságok (118) Tulajdonságok class Pont { private int x; public int y; public int X { get { } set { …. } } } return x; x = value;

Osztályok / tulajdonságok (118) class Pont { private int x; // automat. letrejon, nem

Osztályok / tulajdonságok (118) class Pont { private int x; // automat. letrejon, nem is kell public int y; public int X { get; set; } // automatikus tulajdonság public Pont() { } } public Pont(int a, int b) { x = a; y = b; }

Kivétel kezelés (146 -153) Alapvetően (a Törtek érettségi feladathoz) int sz 1 = 0;

Kivétel kezelés (146 -153) Alapvetően (a Törtek érettségi feladathoz) int sz 1 = 0; // számláló változó try { sz 1 = int. Parse(Console. Read. Line()); } catch (Exception) { Console. Write. Line("Hiba a beolvasás közben!"); }

Kivételkezelés (146 -153) Ha tudjuk a konkrét hiba típusát. try { sz 1 =

Kivételkezelés (146 -153) Ha tudjuk a konkrét hiba típusát. try { sz 1 = int. Parse(Console. Read. Line()); } catch (Format. Exception) { Console. Write. Line("A megadott érték felismerhetetlen számként!"); } catch (Overflow. Exception) { Console. Write. Line("A megadott érték túl nagy/kicsi!"); } catch (Exception) { // biztos ami biztos Console. Write. Line("Ismeretlen hiba!"); }

Kivételkezelés (146 -153) int sz 1 = 0; try { sz 1 = int.

Kivételkezelés (146 -153) int sz 1 = 0; try { sz 1 = int. Parse(Console. Read. Line()); } catch (Exception) { Console. Write. Line("Ismeretlen hiba!"); } finally { Console. Write. Line("Ez a blokk biztosan lefut!"); }

Kivételkezelés (146 -153) checked/unchecked – miért van rá szükség? int a = Int 32.

Kivételkezelés (146 -153) checked/unchecked – miért van rá szükség? int a = Int 32. Max. Value; // az intek maximum értéke try { a += 1; } catch (Overflow. Exception) { Console. Write. Line("'a' értéke túl nagy!"); // nem váltódik ki } finally { Console. Write. Line("a: {0}", a); // -2. 147. 483. 647 }

Kivételkezelés (146 -153) int a = Int 32. Max. Value; // maximum érték try

Kivételkezelés (146 -153) int a = Int 32. Max. Value; // maximum érték try { checked { a += 1; } } catch (Overflow. Exception) { Console. Write. Line("'a' értéke túl nagy!"); // kiváltódik! } finally { Console. Write. Line("a: {0}", a); // marad Int 32. Max. Value }

Fontosabb String függvények Length – a karakterlánc hossza Compare. To(string) – ha az eredmény

Fontosabb String függvények Length – a karakterlánc hossza Compare. To(string) – ha az eredmény 0, akkor azonos Equals(string) – eredmény boolean Index. Of(string) – eredmény egy index v. -1 Insert(int, string) – a második paraméterül kapott szöveget beszúrja az elsőbe, az adott indextől Fontos: Ezek nem módosítják az eredeti karakterláncot, max. visszatérési értékbe adják az újat. Ha mégis ez a cél: String. Builder.

Fontosabb fv. -ek a Math névtérben Math. Sin(x), Math… // a következők elé mind

Fontosabb fv. -ek a Math névtérben Math. Sin(x), Math… // a következők elé mind kell a Math. Cos(x), Tan(x), Exp(x), Log(x), Sqrt(x), Abs(x), Round(x), Ceiling(x), Floor(x), Pow(x, y) Konstansok Math. PI Math. E

További függvények… String http: //msdn. microsoft. com/en-us/library/system. string. aspx Math http: //msdn. microsoft. com/en-us/library/system.

További függvények… String http: //msdn. microsoft. com/en-us/library/system. string. aspx Math http: //msdn. microsoft. com/en-us/library/system. math(v=vs. 110). aspx

Felhasznált irodalom Illés Zoltán. : Programozás C# nyelven JOS, 2008, Második, átdolgozott kiadás Internetes:

Felhasznált irodalom Illés Zoltán. : Programozás C# nyelven JOS, 2008, Második, átdolgozott kiadás Internetes: http: //www. jos. hu (érettségi feladatok) http: //msdn. microsoft. com Teljes C# referencia http: //msdn. microsoft. com/enus/library/618 ayhy 6(v=vs. 110)