Vezérlőpult
D4. A static és a Main · Metódusok

D blokk · Metódusok · 4. tananyag — a blokk tananyagának zárása

A static és a Main: mi van a top-level mögött

Az A6 óta írunk top-level programokat, és azóta tartozunk egy magyarázattal: mi történik valójában, amikor a Program.cs első sora elindul? Ma megismered a klasszikus Main metódust, amelybe a fordító a kódunkat becsomagolja — és végre a public static is megkapja a jelentését. A fejezet végén a B8-as Konzol.cs minden szavát érted.

1 tanóraMain · belépési pontpublic static

Tanulási célok

1A motorháztető alatt: a rejtett Main

A két program pontosan ugyanaz — a bal oldalit írod te, a jobb oldalit készíti belőle a fordító:

Top-level (amit írsz)
Console.WriteLine("Helló!");
Klasszikus forma (amivé válik)
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Helló!");
    }
}

2A static megfejtése

Az egész tanévben Osztály.Metódus() alakban hívtunk metódusokat: Console.WriteLine, int.Parse, Konzol.Cim. Ez a statikus hívás:

3A public megfejtése — és a teljes fejléc

A Konzol.cs metódusait a Program.cs-ből hívjuk — másik fájlból. Ehhez kell a public: azt mondja, a metódus kívülről is elérhető. Nélküle csak a saját osztályán belül lenne hívható. (A láthatósági szintek teljes rendszere — private, internal és társai — a H blokkban jön.)

És ezzel a pillanattal a B8-as fejléc minden szava a helyére került:

public static void Siker(string szoveg)
SzóJelentésMióta érted?
publicmás fájlokból is hívhatóma
staticaz osztály nevén át, objektum nélkül hívhatóma
voidnem ad vissza értéketD1
Sikera metódus neve (PascalCase, igés)D1
(string szoveg)egy string paramétert várD2
💡 ÍGÉRET TELJESÍTVE

A B8-ban azt írtuk a Konzol.cs tetejére: „Hogy BELÜL hogyan működik, azt a D blokkban tanuljuk.” Ez a pillanat az: a fejléc minden szavát érted — és mostantól magad is írsz ilyeneket.

4A klasszikus forma a gyakorlatban

Miért kell ismerned, ha a top-level rövidebb? Mert a világ nagy része a klasszikus formát használja: tankönyvek, régebbi példakódok, vizsga- és versenyfeladatok, generált projektek — és a csapattársaid kódja is lehet ilyen. Mindkettőt folyékonyan kell olvasnod.

Klasszikus formában a saját metódusok a Main mellé kerülnek, az osztályon belülre — és ki kell írni eléjük a static-ot:

class Program
{
    static void Main(string[] args)
    {
        Koszones();
        Console.WriteLine("A program dolgozik…");
    }

    static void Koszones()
    {
        Console.WriteLine("Üdv a programban!");
    }
}

Az átírás szabályai top-levelből klasszikusba:

  1. az utasítások a Main törzsébe kerülnek;
  2. a fájl végi metódusok a Main mellé, static kulcsszóval;
  3. minden mást (Konzol.cs, a program logikája) változatlanul hagyhatsz.
ℹ️ A VS IS FELKÍNÁLJA

Új projekt létrehozásakor a Visual Studio a „Do not use top-level statements” jelölőnégyzettel a klasszikus sablont adja — a gyakorlatban ki is próbáljuk.

Top-level, klasszikus — vagy mindkettő?

Döntsd el az állításról, melyik írásmódra igaz!

1 / 8Pontszám: 0
…

5Gyakori hibák

TünetMi történt?Mit tegyél?
CS5001: Program does not contain a static 'Main' methodklasszikus formában nincs (vagy elgépelt) a belépési ponta metódus neve pontosan Main, nagy M-mel, static-kal
CS8802: Only one compilation unit can have top-level statementskét fájlba is került top-level utasításutasítás csak a Program.cs-ben — az A6 szabálya, ma már az okát is érted
a saját metódus „nem látszik” a Mainbőla metódus a Main törzsén belülre kerültklasszikus formában a metódusok a Main MELLÉ, az osztályba kerülnek
CS0120: An object reference is required…klasszikusban lemaradt a static a saját metódusróla Main csak static metódust hívhat közvetlenül — írd ki a static-ot
CS0122: … is inaccessible due to its protection levelmásik fájl metódusát hívnád, de nem publicami kívülről kell, legyen public (3. szakasz)
CS0017: két belépési ponttop-level utasítások ÉS egy Main is van a projektbenválassz egyet: vagy top-level, vagy klasszikus Main

6Gyakorlat — a számkitaláló klasszikus kiadásban

  1. Új projekt: Console App, név: SzamKitalaloKlasszikus — és most pipáld be a „Do not use top-level statements” négyzetet!
  2. Nézd meg, mit generált a VS: class Program, benne static void Main(string[] args). Olvasd végig — ma már minden szavát érted.
  3. Másold át a D2–D3-as számkitaláló kódját: az utasítások a Main törzsébe, a metódusok (pl. Talalt) a Main mellé, static kulcsszóval.
  4. Másold be a Konzol.cs-t is — azon semmit sem kell változtatni (mindig is klasszikus formájú volt!).
  5. Futtasd: a program pontosan ugyanúgy működik. Tegyél töréspontot a Main első sorára, és F11-gyel járd végig az indulást.
  6. Commit: Szamkitalalo klasszikus Main-formaban.
✅ ELLENŐRZŐ PONT

A program működése változatlan; tudod mutatni, hol a belépési pont; a metódusok a Main mellett, static-kal állnak.

7Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

D4.1⭐

Első klasszikus projekt: hozz létre egy klasszikus (nem top-level) projektet, és írasd ki a Main-ből a neved — közben mondd ki hangosan a static void Main minden szavának jelentését.

D4.2⭐

Fordítás fejben: írd át papíron top-level formába: class Program { static void Main(string[] args) { Console.WriteLine("A"); Udv(); } static void Udv() { Console.WriteLine("B"); } } — és írd le, mit ír ki.

D4.3⭐⭐

Koszones, két kiadásban: írd meg a D1.1-es háromszoros üdvözlést MINDKÉT formában — top-level és klasszikus —, és győződj meg róla, hogy a kimenetük azonos.

D4.4⭐⭐

Kódolvasás: kérj el (vagy keress) egy klasszikus formájú, Main + két metódusból álló rövid kódot, és futtatás NÉLKÜL írd le: mi fut le, milyen sorrendben, mi a kimenet. Utána ellenőrizz futtatással.

D4.5⭐⭐⭐

Nagy átírás: válaszd ki a kedvenc eddigi programodat (pl. a C7-es fagylaltozó-kasszát), és írd át teljesen klasszikus formába. Kommentekkel jelöld: mi került a Main-be, mi lett osztályszintű metódus — és győződj meg róla, hogy a működés hajszálra ugyanaz.

8Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

9Fogalomtár

FogalomJelentés
Maina program belépési pontja — az indításkor a futtatókörnyezet ezt hívja meg
belépési pontaz a metódus, ahonnan a program futása indul — projektenként egy
top-level statementsrövidített írásmód: a fordító a fájl utasításait rejtett Main-be csomagolja
klasszikus formaclass Program + static void Main(string[] args) — kézzel kiírt belépési pont
staticaz osztályhoz tartozó, az osztály nevén át hívható metódus — objektum nélkül
publicmás fájlokból/osztályokból is elérhető
string[] argsa programnak induláskor átadott szavak tömbje (tömbök: E blokk)

10Összegzés — és a D blokk tananyagának zárása

  1. A Main a belépési pont — a top-level írásmód csak rövidítés: a fordító rejtett Program osztályba és Main-be csomagolja a kódot.
  2. A static metódus az osztály nevén át hívható, objektum nélkül — amíg OOP nincs (H blokk), minden metódusunk ilyen.
  3. A public teszi a metódust más fájlokból is hívhatóvá — ezért public a Konzol minden metódusa.
  4. Klasszikus formában a metódusok a Main mellé kerülnek, static-kal — és mindkét formát folyékonyan kell olvasnod.
  5. A public static void Siker(string szoveg) fejléc minden szava a helyén — a B8-as ígéret teljesítve, a D blokk tananyaga teljes.
  6. Ami jön: gyakorlás és témazáró — utána pedig az E blokk, ahol a string[] szögletes zárójele is értelmet nyer: tömbök.