Talán nyugodtan mondhatjuk, hogy az objektumorientált programozás (OOP) alapegysége az osztály, amellyel le tudjuk írni egy modellnek a tulajdonságait, viselkedését. Az osztály tehát a metódusok és az adatok (adattagok) halmaza.
Az adattagok azok a változók, amelyeket az osztályon belül deklarálunk. (Ha ennél a lépésnél a "const" szót is használjuk, akkor értéket kell adnunk az adott változónak, mert konstansként fogjuk majd használni.)
Az osztályból tudunk létrehozni objektumokat, példányokat.
Az objektumorientált programozás egyik elve az, hogy a felhasználó az adott osztály/példány adattagjai és metódusai közül annyit "lásson", amennyi a munkája során feltétlenül kell. A láthatóságot beállító szavakat az adattagok/metódusok elé kell írni, ezáltal tudjuk beállítani azt, hogy "kívülről" mi legyen látható.
A láthatóságot befolyásoló szavak :
Ha definiálunk egy osztályt, akkor kerüljük a public-us adattagok használatát.
Készítsünk most egy projektet, a File/New/Project menüpont kiválasztása után válasszuk ki a ConsoleApplication projektet. A Program osztályban, ahol a Main metódus is található, írjunk két metódust, amelynek private a láthatósága, statikus és int típust adnak vissza (1. ábra).
1. ábra A Program osztály metódusokkal
Ha ezt a projektet futtatjuk debug módban (F5), akkor kiírjuk a képernyőre 10+20 összegét, azaz a 30-at.
Vegyük ki most a két private láthatósággal ellátott metódust és tegyük be egy új osztályba, a "matek" osztályba úgy, hogy módosítsuk az Osszead metódusnak a láthatóságát public-ra (2. ábra).
2. ábra A program.cs file-ban két osztály (Program, matek) van
Nem szerencsés, hogy egy file-ban több osztály is szerepel. Kerüljük későbbiekben ezt a megoldást.
A matek osztály csak két static-us metódust tartalmaz, ezért a két metódus meghívásakor ki kell írnunk az adott osztály nevét, és a tagoperátor (.) kiírása után meg tudjuk hívni az adott metódust. De melyikkel is tudjuk ezt megtenni? A 2. ábrán látható, hogy az IntelliSense csak az Osszead-ot ajánlja fel, mert ennek a láthatósága publikus.
Most töröljük ki a program.cs file-ból a matek osztályt, és adjuk meg újra úgy, hogy ez az osztály a matek.cs file-ban legyen. Ezt úgy tudjuk megtenni, hogy a Solution Explorer ablakban, a projektnévre kattintva az egér jobb gombjával az Add/New Item-re kattintva fel tudunk venni egy új osztályt. Ennek az "Item"-nek a neve legyen a "matek".
3. ábra A matek osztály a matek.cs file-ban
Láthatjuk a 3. ábrán, hogy ez az osztály (amelyben két public-us metódusa van), hiába van külön file-ban, a "ConsoleOsztaly1" névtérben található. Egy névtérben/projektben több osztály is helyet kaphat.
4. ábra Látható a két metódus a matek osztályból
A matek osztály csak static-us metódusokat tartalmaz. Ha példányosítjuk a matek osztályt (a memóriában helyet foglalunk le), akkor a static jelzővel ellátott metódusok, adattagok nem lesznek elérhetők.
Készítsünk ezért egy új osztályt (külön file-ban), a neve legyen : geometria (5. ábra). Legyen ebben az osztályban három adattag, a láthatóságuk private.
Legyen három metódus is, az "Ertekadas" segítségével tudunk értéket adni az "aOldal" és a "bOldal" változóknak (közvetlenül nem tudunk, hiszen ezeket kívülről nem látjuk), a "TeruletSzamol" segítségével tudjuk egy téglalapnak a területét kiszámolni. Végül, a "TeruletMutat" metódussal (amelyet látunk a geometria osztályon kívül) tudjuk a private láthatósággal rendelkező "terulet" adattag értékét kiolvasni.
5. ábra A geometria osztály
Példányosítsuk most ezt az osztályt, foglaljunk helyet ennek a memóriában. A példányosításhoz szükségünk lesz a "new" dinamikus memóriafoglaló operátorra. A példányosításkor kiírjuk először az osztály nevét, majd azután a példánynak a nevét (6. ábra).
6. ábra A geometria osztály példányosítása
Létrehoztunk a "new" segítségével egy "g1" nevű példányt. Látható, hogy a "g1" példánynak két metódusa van (ez nem teljesen igaz, de részletesebben később szólunk erről). Ez a két metódus a "geometria" osztályban publikusak, és nem rendelkeznek static módosítással.
Hozzunk létre még egy példányt, legyen ez a g2 (7. ábra).
7. ábra A "geometria" osztály példányosításai
Mind a "g1"-nek, mind a "g2"-nek egymástól független adattagjai vannak, és a "geometria" osztály metódusait is külön-külön meg tudjuk hívni.
Mi a szerepe az "Ertekadas" metódusnak? Az "Ertekadas" metódus segítégével tudunk az adott példányok adattagjainak értéket adni. Ezzel állítjuk be az "aOldal" és a "bOldal" változók értékeit, hogy tudjunk területet számolni. Ha nem adnánk értéket ezeknek az adattagoknak, akkor a "terulet" változó értéke nulla lenne.
Tehát, ha elfelejtenénk meghívni ezt a metódust, akkor hibás eredményeket írnánk ki a konzolra.
Hogyan kerülhető ki ez a hibalehetőség? Miért szerepel a példányosításnál (g1, g2) a jobb oldalon az osztálynév mellett két zárójel? Hogyan történik a példányosítás, kell-e ehhez valamilyen plusz metódus?
A konstruktorokról a következő részben olvashatunk.
Ebben a cikkben bemutatjuk a metódusok alapjait. Nem érintjük viszont például a túlterhelést, ezt egy következő részben tekintjük át.. . . .
A sorozatunknak ebben a részében átnézzük általánosságban az osztályok alapjait egy konzolalkalmazás segítségével. A konstruktorok viszont a következő részben kerülnek bemutatásra.. . . .
Ebben a cikkben megismerjük a C# nyelv által használt változók nagy részét. Nézünk egy példát a típuskonverzióra.. . . .