A metódusok osztályhoz rendelt függvények vagy eljárások. A metódusok előnye, hogy segítségükkel részfeladatokra bontható egy hatalmas program, illetve a metódusok az osztály adattagjait módosíthatják, elősegítve az egységbe zárást. A metódusok paramétereket is kaphatnak, amelyekkel műveleteket végezhetnek, valamint lehet visszatérési értékük is. Az általános metódus megadási szintaxis a következő:
visszatérési_típus metodus_nev(változó_Típus változó_Név)
{
return visszatérési_érték;
}
Korábban nem került említésre a void típus. Void típus az üres típus jelölője. Metódusok esetén, ha ilyen a visszatérési típusunk, akkor a függvény nem ad vissza, pontosabban nem is adhat vissza értéket. Ebből adódóan a return kulcsszó használata normál esetben felesleges.1
A return kulcsszó után elhelyezett utasítások egy függvény esetén sem fognak lefutni, mivel ez nem csak visszatérési értéket ad vissza, hanem egyben meg is szakítja az adott metódus futását. Ez azt is jelenti, hogy a korábban említett switch-case szerkezet esetén, ha a case után rögtön egy return utasítás áll, akkor a return után nem kell kitenni a break kulcsszót, mivel úgy sem fogja elérni a vezérlés.
Metódusok számára átadandó változónevek közül több is megadható. Amennyiben egy függvényt úgy definiálunk, hogy 3db paramétert várjon, akkor nem hívhatjuk meg csupán két paraméterrel. Ellenkező esetben a fordító hibát fog jelezni. Természetesen a hiba a háromnál több paraméter megadásakor is fellép jelen példa esetén.
A fő metódus
Minden eddigi programunkban egy metódust már írtunk, ez pedig a fő metódus. C# esetén ez az alkalmazás belépési pontja. Ezt a függvényt keresi minden esetben a .NET keretrendszer a program betöltése után. Ő lesz az, ahol az egész program végrehajtása kezdődni fog. Az alábbi példa egy üres alkalmazás kódját mutatja be:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PeldaMetodusok
{
class Program
{
static void Main(string[] args)
{
}
}
}
Feltűnhet, hogy a Program osztály és a Main metódus esetén sincs külön jelölve elérési szint, tehát az osztály internal elérésű, míg a Main privát. A keretrendszer ezen módosítókat a Main metódus keresésekor nem veszi figyelembe. Egy programon belül csak egy Main metódust definiáljunk, ellenkező esetben a programunk fordítási hibába ütközhet.
Valójában azonban többet is megadhatunk, hiszen különböző névterek és osztályok létrehozására lehetőségünk van, viszont attól, hogy valamit megtehetünk, nem biztos, hogy meg kell tennünk. Egyébként ha ilyen irányú terveink vannak, akkor egzakt módon meghatározható, hogy melyik Main függvény az alkalmazás belépési pontja.
Ez a Solution Explorerben végezhető el. Jobb kattintsunk az aktuális projektünk nevén, majd a felugró menüben a Properties menüpontot válasszuk. Ez átvisz bennünket a projektünk beállítási lapjára. Itt számos dolgot beállíthatunk egyébként, de most minket az első lap, az Application nevű érdekel.
Az Application fülön belül van egy Startup object lenyíló menü, amelynek az értéke alapértelmezetten Not set, vagyis nem beállított. Ezen konfiguráció mellett a fordító azt feltételezi, hogy egyetlen egy Main nevű metódus van a programunkban valahol, vagyis ez lesz a belépési pont. Amennyiben több Main metódusunk is lenne több osztályban, akkor itt tudnánk beállítani a belépési pontot tartalmazó osztályt. A Main metódus minden esetben statikus módosítóval kell, hogy ellátott legyen.
C# 7.1 előtt az alábbi Main metódus szignatúrák használhatóak:
public static void Main();
public static int Main();
public static void Main(string[] args);
public static int Main(string[] args);
Statikus elérés
A statikus elérés azt jelenti, hogy a static kulcsszóval megjelölt elemekre nem az objektum példányon keresztül hivatkozunk, hanem az osztály nevén keresztül. Ez azt jelenti, hogy van mondjuk egy Alma osztályom. Ez rendelkezzen egy statikus metódussal, amit a példa kedvéért nevezzünk valaminek. Ezek után a Valami() metódust minden esetben az Alma osztályon keresztül érjük el:
class Alma
{
public static void Valami() {}
}
//később:
Alma.Valami() //helyes
//helytelen:
Alma piros = new Alma();
piros.Valami();
-
Optimalizációs célok esetén szokás return kulcsszót alkalmazni egy-egy metódus logikájának átszervezésére. Erről a későbbiek folyamán lesz szó.↩