A könyv nyomtatott verziója megvásárolható a könyvesboltokban, és a kiadó webáruházában: www.joskiado.hu Reiter István C# programozás lépésről lépésre JEDLIK OKTATÁSI STÚDIÓ Budapest, 2012 Minden jog fenntartva. A szerző és a kiadó a könyv írása során törekedtek arra, hogy a leírt tartalom a lehető legpontosabb és naprakész legyen. Ennek ellenére előfordulhatnak hibák, vagy bizonyos információk elavulttá válhattak. A példákat és a módszereket mindenki csak saját felelősségére alkalmazhatja. Javasoljuk, hogy felhasználás előtt próbálja ki és döntse el saját maga, hogy megfelel-e a céljainak. A könyvben foglalt információk felhasználásából fakadó esetleges károkért sem a szerző, sem a kiadó nem vonható felelősségre. Az oldalakon előforduló márka- valamint kereskedelmi védjegyek bejegyzőjük tulajdonában állnak. © Reiter István, 2012 Borító: Varga Tamás Anyanyelvi lektor: Dr. Bonhardtné Hoffmann Ildikó Kiadó: Jedlik Oktatási Stúdió Kft. 1215 Budapest, Ív u. 8-12. Internet: http://www.jos.hu E-mail: [email protected] Felelős kiadó: a Jedlik Oktatási Stúdió Kft. ügyvezetője Nyomta: LAGrade Kft. Felelős vezető: Szutter Lénárd ISBN: 978-615-5012-17-4 Raktári szám: JO-0340 E LŐSZÓ Amikor 2008. augusztusában elkészültem ennek a könyvnek az első változatával még problémát okozott átlépni a „bűvös” 100 oldalas határt. Ha jól emlékszem, végül 108 oldal lett, szerencsére már csak az Internet egy sötét sarkában lehet megtalálni. Érdekes módon ezúttal is az oldalszám okozott gondot, igaz, fordult a kocka: valamivel több mint 300 oldalt kellett kitöltenem, némi kompromisszum árán sikerrel is jártam. Ha jobban belegondolok, az elmúlt 4 évem alapjaiban határozta meg ez a könyv. Rengeteget köszönhetek neki, de őszintén szólva néha gyűlöltem is. Valójában most is ezt teszem, hiszen éjjel 11 van és álmos vagyok. 4 év alatt elképesztő változáson esett át az informatika világa. Ebben a pillanatban is újabb csodák születnek. Borzalmasan nehéz lépést tartani a technológia végtelen evolúciójával, szinte lehetetlennek látszó feladat. Ennek a könyvnek a célja, hogy olyan alapokat nyújtson, amelyre nyugodtan támaszkodhatunk a kalandos úton, amelyet szoftverfejlesztésnek hívnak. Több mint 40000 olvasó többszáz jótanácsának, visszajelzésének eredménye az amit most a kezedben tartasz! Nem fogok hazudni, ez nem egy mindentudó lexikon és nem is csodalámpa, amit megdörzsölve azonnal fejedbe száll a tudás - bár próbálkozni lehet. Tekintsd társnak, jóbarátnak, aki utat mutat, ha elakadtál. Remélem, épp annyi örömet okoz majd Neked, mint nekem tette! Kötelességem köszönetet mondani mindazoknak, akik hozzájárultak a könyv létrejöttéhez! Sajnos annyi helyem nincs, hogy mindenki elférjen, mégis szeretném kiemelni néhányukat: Kovács Gyula és Balázs Gábor tanár uraknak, a gyömrői Teleki László Gimnázium és Informatikai Szakközép– iskolából. Lippé Szabolcsnak és a Microsoft Magyarországnak, köszönöm a lehetőséget, remélem hamarosan elérjük a hatszámjegyű letöltésszámot is! Ecsegi Szandrának, hogy végig mellettem állt, rámutatott olyan dolgokra, amik nekem eszembe sem jutottak. Köszönöm. A könyv és a hozzátartozó programozási példák a weben is elérhetőek a Devportal.hu oldalon. Tóalmás, 2012. augusztus Reiter István 5 6 T ARTALOMJEGYZÉK MICROSOFT .NET FRAMEWORK ___________________________________________________________ 15 A .NET platform ___________________________________________________________________________ 15 MSIL/CIL _________________________________________________________________________________ 15 Fordítás és futtatás ________________________________________________________________________ 16 BCL _____________________________________________________________________________________ 16 A C# programozási nyelv ____________________________________________________________________ 16 Alternatív megoldások _____________________________________________________________________ 16 ISMERKEDÜNK A NYELVVEL _______________________________________________________________ 18 Visual Studio _____________________________________________________________________________ 18 Hello World! ______________________________________________________________________________ 18 A C# szintaktikája __________________________________________________________________________ 21 Kulcsszavak ______________________________________________________________________________ 22 Megjegyzések _____________________________________________________________________________ 22 Névterek _________________________________________________________________________________ 23 VÁLTOZÓK ____________________________________________________________________________________ 24 Deklaráció és definíció______________________________________________________________________ 24 Típusok __________________________________________________________________________________ 24 Lokális és globális változók __________________________________________________________________ 25 Referencia- és értéktípusok _________________________________________________________________ 25 Referenciák ______________________________________________________________________________ 27 Boxing és unboxing ________________________________________________________________________ 28 Konstansok _______________________________________________________________________________ 30 A felsorolt típus ___________________________________________________________________________ 30 Null típusok ______________________________________________________________________________ 32 A dinamikus típus _________________________________________________________________________ 33 7 OPERÁTOROK ________________________________________________________________________________ 35 Operátor precedencia ______________________________________________________________________ 35 Értékadó operátor _________________________________________________________________________ 36 Matematikai operátorok ____________________________________________________________________ 36 Relációs operátorok ________________________________________________________________________ 37 Logikai és feltételes operátorok ______________________________________________________________ 37 Bit operátorok ____________________________________________________________________________ 40 Rövid forma ______________________________________________________________________________ 43 Egyéb operátorok _________________________________________________________________________ 43 VEZÉRLÉSI SZERKEZETEK __________________________________________________________________ 46 Szekvencia _______________________________________________________________________________ 46 Elágazás _________________________________________________________________________________ 46 Ciklus ___________________________________________________________________________________ 51 GYAKORLÓ FELADATOK ____________________________________________________________________ 57 Szorzótábla _______________________________________________________________________________ 57 Számológép ______________________________________________________________________________ 60 Kő – Papír – Olló___________________________________________________________________________ 62 Számkitaláló játék _________________________________________________________________________ 64 TÍPUSKONVERZIÓK _________________________________________________________________________ 68 Ellenőrzött konverziók ______________________________________________________________________ 68 Is és as __________________________________________________________________________________ 69 Karakterkonverziók ________________________________________________________________________ 70 TÖMBÖK ______________________________________________________________________________________ 71 Többdimenziós tömbök _____________________________________________________________________ 72 STRINGEK _____________________________________________________________________________________ 75 Metódusok _______________________________________________________________________________ 76 StringBuilder _____________________________________________________________________________ 77 8 Reguláris kifejezések _______________________________________________________________________ 78 GYAKORLÓ FELADATOK II. ________________________________________________________________ 81 Minimum- és maximumkeresés ______________________________________________________________ 81 Szigetek _________________________________________________________________________________ 81 Átlaghőmérséklet _________________________________________________________________________ 82 Buborékrendezés __________________________________________________________________________ 83 OBJEKTUM-ORIENTÁLT PROGRAMOZÁS - ELMÉLET __________________________________ 85 UML ____________________________________________________________________________________ 85 Osztály __________________________________________________________________________________ 85 Adattag és metódus ________________________________________________________________________ 85 Láthatóság _______________________________________________________________________________ 86 Egységbezárás ____________________________________________________________________________ 86 Öröklődés ________________________________________________________________________________ 86 OSZTÁLYOK __________________________________________________________________________________ 88 Konstruktorok ____________________________________________________________________________ 89 Adattagok ________________________________________________________________________________ 91 Láthatósági módosítók _____________________________________________________________________ 92 Parciális osztályok _________________________________________________________________________ 92 Beágyazott osztályok _______________________________________________________________________ 94 Objektuminicializálók ______________________________________________________________________ 95 Destruktorok _____________________________________________________________________________ 95 METÓDUSOK ________________________________________________________________________________ 103 Paraméterek ____________________________________________________________________________ 105 Visszatérési érték _________________________________________________________________________ 110 Kiterjesztett metódusok ___________________________________________________________________ 111 TULAJDONSÁGOK ___________________________________________________________________________ 113 INDEXELŐK __________________________________________________________________________________ 115 9 STATIKUS TAGOK __________________________________________________________________________ 117 Statikus adattag __________________________________________________________________________ 117 Statikus konstruktor ______________________________________________________________________ 118 Statikus metódus _________________________________________________________________________ 119 Statikus tulajdonság ______________________________________________________________________ 120 Statikus osztály __________________________________________________________________________ 120 STRUKTÚRÁK _______________________________________________________________________________ 121 Konstruktor _____________________________________________________________________________ 121 Destruktor ______________________________________________________________________________ 122 Adattagok _______________________________________________________________________________ 123 Hozzárendelés ___________________________________________________________________________ 123 Öröklődés _______________________________________________________________________________ 125 OSZTÁLYKÖNYVTÁRAK ___________________________________________________________________ 126 GYAKORLÓ FELADATOK III. ______________________________________________________________ 130 Faktoriális és hatvány _____________________________________________________________________ 130 Gyorsrendezés ___________________________________________________________________________ 131 Láncolt lista _____________________________________________________________________________ 133 Bináris keresőfa __________________________________________________________________________ 134 ÖRÖKLŐDÉS _________________________________________________________________________________ 138 Virtuális metódusok ______________________________________________________________________ 139 Polimorfizmus ___________________________________________________________________________ 141 Lezárt osztályok és metódusok ______________________________________________________________ 142 Absztrakt osztályok _______________________________________________________________________ 142 INTERFÉSZEK _______________________________________________________________________________ 145 Explicit interfészimplementáció _____________________________________________________________ 147 Virtuális tagok ___________________________________________________________________________ 148 10