C#-ot gyakorlok. Az osztályok, metódusok elméletét értem, gyakorlat nem megy. Egészet visszaadó metódus hívása?
A főprogramból hívom a metódust, kap egy int típusú változót.
A metódus számol, oszt-szoroz, az adott int értéke megváltozik.
Szeretném visszakapni és tovább használni a főprogramban immár a megújult int-et.
Odáig eljutottam, hogy a metódus lefut, meg is kapja az int értékét és hibátlanul elvégzi a számításokat.
Viszont a főprogram az eredeti int-tel számol tovább, nem az újjal.
Ref hivatkozással megoldódott, de az elvileg nem praktikus ide, referenciatípusoknál volna jó, illetve ref esetén az int egy virtuális példányával számol a program, pedig itt nem ez lenne a cél. (Jól értem ezt az egészet?)
Kérlek, ne bántsatok!
Igen, buta vagyok még ehhez, ugyanakkor pont tanulni akarok, megérteni, fejlődni. ;)
Nyugi, én sem értek hozzá, meg nem is egészen világos a problémád... A metódus végén a return adja vissza az eredményt. Mit t'om én:
int valami(int ertek){
//számolás...
return ertek;
}
Ezt így hívhatod meg a programból:
...
ertek = valami(ertek);
...
A metódus által megkapott változó nem ugyanaz, hiába hívod ugyanúgy.
Sokszor magát a szintaktikát nem értem. :D
Akár hiszed, akár nem, most jelenleg működik.
A metódus által "átformált" egésszel számol tovább a főprogram.
Viszont elég a metódust simán csak így létrehozni ezek szerint?
int valami(int parametervalami) {} ?
Amúgy miért kéri a láthatósági beállítást?
Jelenleg úgy van nálam, hogy: public int valami(int parametervalami) {}
Egyébként ha nem adom meg a láthatóságot, nem public automatikusan?
igen elég így létrehozni, ha a fenti dolgot szeretnéd megvalósítani
C# -ban az alábbi láthatósági szabályok vannak:
private csak a tartalmazó osztályban lehet hozzáférni
protected csak a tartalmazó osztályból és a származtatott osztályokban lehet használni
public nincs korlátozás
internal csak a tartalmazó programból lehet használni
protected internal ua. mint előbb plusz a protected hozzáférés
alapjáraton privateként hozod létre
"Viszont a főprogram az eredeti int-tel számol tovább, nem az újjal."
C#-ban két féle típus van: érték és referencia. Az érték típusok (lsd int, byte, stb, struct) paraméterátadásnál lemásolódnak a paraméterbe. Ha ezzel számolsz, akkor az az eredetire értelemszerűen nem lesz hatással. A ref a következőt csinálja: érték típus esetén átadja ugyanazt a memóriacímkét, így ugyanazzal számol tovább a program; referencia típus esetén pedig nem történik referencia-copy (erre olyan esetekben van szükség, ha újra akarod allokálni a függvényen belül az objektumot, pl: ha ref nélkül adsz át tömböt paraméterként, akkor a módosítás kihat az eredetire, de egy new int[n] már nem).
Az, hogy az eredményt hogy akarod közölni, az sok mindentől függ. Nyilván ha x-ból számol ki egy y értéket, akkor nem az a praktikus, ha az x átváltozik y-ra. Visszatérési értékként érdemes ilyenkor visszaadni (pl: int szamol(int x) {oszt-szoroz.. return x;}, így az int y = szamol (x) esetén y-nal tudsz tovább számolni).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!