c# nyelvi áttekintő

42
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.

Upload: media

Post on 10-Jan-2016

33 views

Category:

Documents


1 download

DESCRIPTION

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; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C# nyelvi áttekintő

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.

Page 2: C# nyelvi áttekintő

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”;

Változók / állandók (32-34)

Page 3: C# nyelvi áttekintő

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:

string s = „vmi” + a; // a integer (a –ra a ToString meghívódik ilyenkor)

Elemi típusok (34-39)

Page 4: C# nyelvi áttekintő

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/s1

ax56ch(v=vs.110)

Elemi típusok (34-39)

Page 5: C# nyelvi áttekintő

newint[]a;a = new int(); // egy egész számára elegendő hely foglalása = 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)

Page 6: C# nyelvi áttekintő

(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ásraint a = int.Parse("1"); // a = 1int b = Convert.ToInt32("1"); // b = 1

Egy operandusú operátorok (45-46)

Page 7: C# nyelvi áttekintő

A Convert használható minden gyakori típus átkonvertálásához.

Létezik Convert.ToInt32() … Convert.ToFloat() CTS = Common Type System CTS Boolean, Int16, Int32, Int64, Float,

Double, String, Decimal, Byte, Char

Convert.ToCTSTípusnév

Page 8: C# nyelvi áttekintő

*, /, % (maradékképzés) +, - i is int // i az int típusból van-e létrehozvavar 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)

Két operandusú operátorok (46-52)

Page 9: C# nyelvi áttekintő

Három operandusú e1 ? e2 : e3

Két operandusú értékadó operátorok: +=, -=, *=

Továbbiak: http://

msdn.microsoft.com/en-us/library/6a71f45d

Egyéb operátorok (52 - 56)

Page 10: C# nyelvi áttekintő

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, Tömbök (57-61)

Page 11: C# nyelvi áttekintő

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)

Page 12: C# nyelvi áttekintő

Fontos megjegyezni:1. Nem lehet struktúrából származtatni2. Nem lehet a mezőket deklaráláskor inicializálni3. 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.

Adattípusok, Struktúrák (62-66)

Page 13: C# nyelvi áttekintő

struct Pont {public int x;public int y;

}

Pont p; // OKp.x = 5;p.y = 6;

Struktúra példa

Page 14: C# nyelvi áttekintő

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

Struktúra példa (2)

Page 15: C# nyelvi áttekintő

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 }

Utasítások, kifejezések (67)

Page 16: C# nyelvi áttekintő

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 (68-69)

Page 17: C# nyelvi áttekintő

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 (2)

Page 18: C# nyelvi áttekintő

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;}

Elágazás utasítás (3)

Page 19: C# nyelvi áttekintő

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 Forfor(int i =0; i <5; i++){ utasítás1;..} Foreachforeach(azonosító in vektor){ utasítás; }

Ciklusok (70-75)

Page 20: C# nyelvi áttekintő

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égeConsole.WriteLine(i);

} goto címke; NEM AJÁNLOTT, de létezik.

Ugró utasítások (75-82)

Page 21: C# nyelvi áttekintő

Könyvtárak használatausing névtér_vagy_osztály vagyusing(objektum){utasítások;} Disposable objektumokhoz, pl

StreamReader/StreamWriter A kivételkezeléshez is kapcsolódik

(később…)

Egyéb utasítások (75-82)

Page 22: C# nyelvi áttekintő

É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); MessageBox.Show(c.ToString()); // out: 2

Függvények

Page 23: C# nyelvi áttekintő

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

Page 24: C# nyelvi áttekintő

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

Page 25: C# nyelvi áttekintő

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);MessageBox.Show("{0}, {1}", a, b);

Függvények

Page 26: C# nyelvi áttekintő

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); MessageBox.Show("{0} ", c); // 5

Függvények

Page 27: C# nyelvi áttekintő

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

Page 28: C# nyelvi áttekintő

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

Page 29: C# nyelvi áttekintő

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

Page 30: C# nyelvi áttekintő

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)

Függvények

Page 31: C# nyelvi áttekintő

Osztályok definiálásaclass Pont {

private int x; // adattagokprivate int y;

public Pont() { // konstruktor}

public Pont(int a, int b) { // felüldefiniált konstruktorx = a;y = b;

}}

Osztályok (102)

Page 32: C# nyelvi áttekintő

Tulajdonságokclass Pont {

private int x;public int y;

public int X {get {

return x;}set {

x = value;}

}….}

Osztályok / tulajdonságok (118)

Page 33: C# nyelvi áttekintő

class Pont {private int x; // automat. letrejon, nem is kellpublic int y;

public int X { get; set; } // automatikus tulajdonság

public Pont() { }

public Pont(int a, int b) {x = a;y = b;}

}

Osztályok / tulajdonságok (118)

Page 34: C# nyelvi áttekintő

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étel kezelés (146-153)

Page 35: C# nyelvi áttekintő

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)

Page 36: C# nyelvi áttekintő

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)

Page 37: C# nyelvi áttekintő

checked/unchecked – miért van rá szükség?int a = Int32.MaxValue; // az intek maximum értéketry{

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)

Page 38: C# nyelvi áttekintő

int a = Int32.MaxValue; // maximum értéktry{

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}

Kivételkezelés (146-153)

Page 39: C# nyelvi áttekintő

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 String függvények

Page 40: C# nyelvi áttekintő

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

Fontosabb fv.-ek a Math névtérben

Page 42: C# nyelvi áttekintő

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/618a

yhy6(v=vs.110)

Felhasznált irodalom