430 likes | 584 Views
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;
E N D
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 • charch; • int egy, tizenegy; • constfloat 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’; • string • fontosabb operátorok: +, +=, @ • [] a string indexelése: pl. "szia"[1] = z // read-only. • @”C:\programok\alma.txt” -> érzékeny karakterek • fontosabb függvények… később • Érdekesség: • strings = „vmi” + a; // a integer • (a –raaToString meghívódik ilyenkor)
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/en-us/library/s1ax56ch(v=vs.110)
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.81F; Console.WriteLine(a); // 9 • Másik lehetőség a konvertálásra int a = int.Parse("1"); // a = 1 int b = Convert.ToInt32("1"); // b = 1
Convert.ToCTSTípusnév A Convert használható minden gyakori típus átkonvertálásához. Létezik Convert.ToInt32() … Convert.ToFloat() CTS = CommonType System CTS Boolean, Int16, Int32, Int64, Float, Double, String, Decimal, Byte, Char
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.WriteLine("Szám!"); } if (a is String) { Console.WriteLine("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ú • e1 ? e2 : e3 • Két operandusú értékadó operátorok: • +=, • -=, • *= • Továbbiak: • http://msdn.microsoft.com/en-us/library/6a71f45d
Adattípusok, Tömbök (57-61) int[]numbers; // vektordefiníció numbers = new int[10]; numbers=newint[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> 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: • Nem lehet struktúrából származtatni • Nem lehet a mezőket deklaráláskor inicializálni • Van beépített, default konstruktor (paraméter nélkül) de az sem inicializálja a mezőket. (saját kell) • 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; // OK p.x = 5; p.y = 6;
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 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; } if(kifejezés){ utasítás; } else { utasítás; } • Többirányú elágazás: switch(kifejezés<string|int>){ case érték1: utasítás1; <break|goto|return>; case érték2: utasítás2; <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 (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 meg: switch (1) { case 1: case 2: MessageBox.Show("1"); MessageBox.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 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ás1;..} • 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 switchet). • continue; Folytatja.. int i = 1; while(true){ i++; if(i<10) continue; // következő ciklusmag if(i==11) break; // Ciklus vége Console.WriteLine(i); } • goto címke; NEM AJÁNLOTT, de létezik.
Egyéb utasítások (75-82) • Könyvtárak használata usingnévtér_vagy_osztály • vagy using(objektum){utasítások;} • Disposable objektumokhoz, plStreamReader/StreamWriter • A kivételkezeléshez is kapcsolódik (később…)
Függvények Érték szerinti paraméter átadás (83) staticint maxfv(int a, int b) { return a > b ? a : b; } int c = maxfv(1, 2); MessageBox.Show(c.ToString()); // out: 2
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 int y) { int t = x; x = y; y = t; } int a = 2, b = 3; csere(ref a, ref b); // fontos a ref kulcsszó! MessageBox.Show("{0}, {1}", a, b); // out: 3, 2
Függvények Függvény eredmény paramétere (out) (85) voidcsere(out int x, out int y) { int t = x; x = y; y = t; } int a = 2, b = 3; csere(ref a, ref b); MessageBox.Show("{0}, {1}", a, b);
Függvények Függvény eredmény paramétere (out) (85) voidosszead(int x, int y, out int osszeg) { osszeg = x + y; } int a = 2, b = 3, c = 0; osszead(a, b, out c); MessageBox.Show("{0} ", c); // 5
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); MessageBox.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 = 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 változó számú paraméter definiálása előtt. void rendez(int n, params int[] miket) voidrendez(paramsint[] miket, int n) // hiba
Függvények 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 { privateint 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 { privateint x; public int y; publicint X { get { returnx; } set { x = value; } } …. }
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 sz1 = 0; // számláló változó try { sz1 = int.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("Hiba a beolvasás közben!"); }
Kivételkezelés (146-153) Ha tudjuk a konkrét hiba típusát. try { sz1 = int.Parse(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("A megadott érték felismerhetetlen számként!"); } catch (OverflowException) { Console.WriteLine("A megadott érték túl nagy/kicsi!"); } catch (Exception) { // biztos ami biztos Console.WriteLine("Ismeretlen hiba!"); }
Kivételkezelés (146-153) int sz1 = 0; try { sz1 = int.Parse(Console.ReadLine()); } catch (Exception) { Console.WriteLine("Ismeretlen hiba!"); } finally { Console.WriteLine("Ez a blokk biztosan lefut!"); }
Kivételkezelés (146-153) checked/unchecked – miért van rá szükség? int a = Int32.MaxValue; // az intek maximum értéke try { a += 1; } catch (OverflowException) { Console.WriteLine("'a' értéke túl nagy!"); // nem váltódik ki } finally { Console.WriteLine("a: {0}", a); // -2. 147. 483. 647 }
Kivételkezelés (146-153) int a = Int32.MaxValue; // maximum érték try { checked { a += 1; } } catch (OverflowException) { Console.WriteLine("'a' értéke túl nagy!"); // kiváltódik! } finally { Console.WriteLine("a: {0}", a); // marad Int32.MaxValue }
Fontosabb String függvények Length – a karakterlánc hossza CompareTo(string) – ha az eredmény 0, akkor azonos Equals(string) – eredmény boolean IndexOf(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: StringBuilder.
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.math(v=vs.110).aspx
Felhasznált irodalom • Illés Zoltán.: Programozás C# nyelvenJOS, 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/en-us/library/618ayhy6(v=vs.110)