130 likes | 237 Views
C# tagfüggvények. Tagfüggvény. Osztályban definiált függvény C#-ban nem definiálhatunk globális függvényt! Formája: [attribútum] [módosítók] visszatérési_érték fvnév([paraméterszignatúra]){ } Egy módosító csak egyszer szerepelhet. Kölcsönösen kizárják egymást: static, virtual, override
E N D
Tagfüggvény Osztályban definiált függvény C#-ban nem definiálhatunk globális függvényt! Formája:[attribútum] [módosítók] visszatérési_érték fvnév([paraméterszignatúra]){ } Egy módosító csak egyszer szerepelhet. Kölcsönösen kizárják egymást:static, virtual, override Kölcsönösen kizárják egymást:new, override C# osztályok 2 Krizsán Zoltán, iit
Tagfüggvény változó hosszúságú paraméterlista class OpenEnded{ public void Foo( params object[] pp ){ for (int i = 0 ; i < pp.GetLength(0) ; i++){ Console.WriteLine(pp[i]); } } } class TestVarArgs{ static void Main(string[] args){ OpenEnded oe = new OpenEnded(); oe.Foo( 123, 456, "Hello", new Point(7,8), 9.0m, true, 'X‘); } } // a piros szöveg helyett bármilyen típus állhat C# osztályok 3 Krizsán Zoltán, iit
Tagfüggvényparaméter átadás módjai void ertekSzerint(int a) Érték szerinti paraméter átadás (másolat) void referenciaSzerint(ref int a) hívásnál is kell a ref kulcsszó, kötelező inicializálni void kimenetiRefSzerint(out int a) hívásnál is kell az out kulcsszó, kötelező a fv. törzsben beállítani C# osztályok 4 Krizsán Zoltán, iit
Paraméter átadás II • Ha referencia típust adunk át paraméterként • Érték szerint, akkor a tartalmát • Referencia szerint, akkor az objektumot is tudjuk változtatni.
TagfüggvényMain fv. alakjai public static void Main() {...} public static void Main(string[] args) {...} public static int Main() {...} public static int Main(string[] args) {...} Paramétere a parancssori argumentumokat tartalmazza. C# osztályok 6 Krizsán Zoltán, iit
TagfüggvényVirtuális fv. Alapból nem virtuális (nem úgy, mint JAVA) virtual kulcsszó segítségével lesz csak az. Ha egy fv. virtuális, akkor kötelező definiálni a törzsét (nincs pure virtual) Felülírása az override minősítővel a leszármazott osztályok valamelyikében Teljes azonosság kötelező. C# osztályok 7 Krizsán Zoltán, iit
Konstruktor Neve: osztálynév Nem lehet meghívni explicite, de meghívódik miután a rendszer létrehozta az objektumot. Default konstruktor létrejön, ha nem definiálunk (paraméter nélküli). Ha nincs konstruktor itt is létrejön egy, és ez 0, false, null-ra állítja az adattagokat. C# osztályok 8 Krizsán Zoltán, iit
Konstruktor II • Feladata az objektum inicializálása „konstruálás”. • Több is lehet, de paraméterei mások • Hívható másik konstruktor, akár az ősosztályé is, de a formája a következő: public Employee(int weeklySalary, int numberOfWeeks) : this(weeklySalary) { } public Employee(int weeklySalary, int numberOfWeeks) : base(weeklySalary) { }
Konstruktor fajtái • Példány • Egy objektum inicializálására használjuk • Privát • Objektum létrehozását tiltjuk meg vele. • Statikus • Az osztály első betöltődésekor fut le • vagy amikor a statikus mezőre először hivatkozunk. • vagy az első példány létrehozásakor • Feladata a csak olvasható vagy statikus mezők beállítása. • Nem lehet paramétere, sem hozzáférési módosítója. • Midig hamarabb fut le, mint a példány konst.
Konstruktor IVprivát konstruktor Olyan osztályoknak kell, amelyeket nem szabad példányosítani. Azaz, ha csak statikus részük van. Vigyázzunk, ha nem adunk meg hozzáférést, akkor az privát lesz. A Math osztálynak is privát van.
Destruktor Neve: ~osztálynév Csak 1 darab lehet. Ami finalize-re konvertálódik. Nem öröklődik, Nem lehet felüldefiniálni. Nem lehet meghívni explicite, de meghívódik amikor a gc felszabadítja, kisöpri az objektumot. C# osztályok 12 Krizsán Zoltán, iit
Destruktor II Nem lehet sem paramétere Nem lehet módosítója. Feladata az utóhatások megszüntetése. (értesítés, nyugtázás, …). Stuktúrának nem lehet.