Mire való a setter metódus?















NAGYON leegyszerűsítve:
Ugye vannak az osztályok, mint például a Kutya.
Egy osztálynak vannak jellemzői - például a Kutya osztálynak van Neve vagy Fajtaja.
A metódus arra szolgál, hogy egy objektum "csináljon" valamit. Például a Kutya osztálynak van Ugat metódusa, ami azt adja vissza, hogy "Vau!".
A getter és a setter is egy ilyen metódus: a getter az adott osztály egy jellemzőjét kérdi le, a setter meg állítja be (mert nem szokás az osztály jellemzőit direkt módosítani).
Például ha a Kutya osztálynak van egy Ehseg jellemzője (hogy mennyire éhes a kutya) azt egy EhesE metódussal lekérdezhetjük (ha this.Ehseg > 75 akkor True, különben False), és egy Etet metódussal csökkenthetjük az értékét (this.Ehseg--).





"csökkenthetjük az értékét (this.Ehseg--)"
Pontosítva: Ha this.ehseg > 0 akkor this.ehseg--





Az egyes jól leírta a lényeget.
Ha publikus az oldalszam, akkor bárki módosíthatja, a
kisregeny.oldalszam = valami
beírásával.
Ha van az oldalszámhoz setter, akkor ugyanúgy bárki módosíthatja:
kisregeny.setOldalszam(valami)
A fő különbség, hogy a setOldalszam függvénybe beteheted, hogy ha a kapott oldalszam<0, akkor dobjon egy kivételt.
Ha közvetlenül elérhetővé teszed, akkor ezt nem teheted meg.
Egy másik példa.
Van egy változód, ami int[].
A jóhiszemű programozó azt csinálja, hogy létrehozol egy példányt az osztályból, átadja neki ezt a tömböt.
Utána ugyanebbe a tömbbe új értékeket rak, majd létrehoz egy új példányt és annak is átadja a tömböt.
Mi történik ekkor az első példánnyal? Ő csak referenciát kapott a tömbre, tehát ha a hívó utána megváltoztatja, akkor ott is változik.
Így a két példány hiába lett különböző tömbbel létrehozva, ugyanaz az érték lesz benne végül.
De ha van egy setter metódus a közvetlen beállítás helyett, akkor a setterben átmásolhatod az értékekekt a tömbből, és a lemásolt tömböt rakod el magadnak. Így az első példány védve van attól, hogy bárki véletlenül vagy direkt megváltoztassa a benne tárolt értékeket.





#2: Nem egészen. A proeprty-k mögött a CLI kódban bizony ott vannak a get/set metódusok - az egy más kérdés, hogy még a CIL is vezeti a fejlesztő kezét azzal, hogy összekapcsolja ezeket neked egy entitásnak.
A többiek egyébként többé-kevésbé jól leírták.
Annyit tenék hozzá, hogy az OO programozás egyik fontos elve az adatrejtés, ami szaatosan fogalmazva annyit jelent, hogy a külfilágnak semmi köze egy objektum belső állapotához, ezért arra törekszik a fejlesztő, hogy minden adattagot elrejtsen a külvilág elől.
Sok esetben ez nem lehetséges, mert adott egy könyv, aminek be kell állítani az árát, vagy egy képernyőn megjelenő komponensnek mondjuk a színét. Ilyen esetben csak bele kell nyúlni az objektum állapotába - ekkor hasznos a "setter" metódus.
A metódusban ugyanis kontrollált módon tudod beállítani a tlajdonságot. A könyves példánál maradva tudsz dobni ordas nagy hibaüzenetet, ha negatív árat akarnak megadni, vagy a képernyős komponensnél ha színt állítanak, akkor újra tudod rajzolni a képernyőt.





"#2: Nem egészen. A proeprty-k mögött a CLI kódban bizony ott vannak a get/set metódusok - az egy más kérdés, hogy még a CIL is vezeti a fejlesztő kezét azzal, hogy összekapcsolja ezeket neked egy entitásnak."
Ne pusztíts el ezzel a baromsággal légyszi. Amögött meg egyesek és nullák vannak, amögött meg a turbina pörög az erőműben.
És kit érdekel ez?
A modern programozás lényege az absztrakció.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!