C# programnyelvbe hogy lehet saját magam által készített osztály pointer-öket használni?
Tényleges pointereket csak az alap típusokkal lehet csinálni unsafe blokk segítségével. Ez szép, jó, hurrá. Örüljünk.
De nekem nem alap tagból kéne pointer. Hanem egy általam készített osztályból. Gondoltam ott a ref... Gondoltam. De csak blokkokba lehet használni, mondotta az IDE, majd aláhúzta pirossal. Nekem meg ugye osztály szintű adattagként lenne rájuk szükségem.
Mit lehet ilyenkor csinálni? Csak pakoljam bele simán egy megfelelő típusu változót, majd bízzam rá a compiler-re? Őszintén ezt nem igazán csinálnám, mert nekem kötelezően pointer-re lenne szükségem, mert ugye az osztály, amihez kéne a pointer tartalmaz egy 65536 elemű tömböt, amit nem igazán szeretném ha lemásolna...
Meg jó lenne, ha ahhoz a pointer-höz publikus metódusokon keresztül hozzá férne a külvilág. Azaz tudná írni is és olvasni is.
Valakinek valami ötlet? C++ és C nyelveken a ponter-özés olyan könnyen megy, mint az ágybavizelés... Persze itt...
És ezt kötelezően C# nyelven kell megvalósítanom.
A hasznos válaszokat előre köszönöm.
A C#-ban vannak referencia és érték típusok. Előbbibe tartozik minden általad írt osztály, tömbök, adatszerkezetek, stb. A referenciatípusok majdnem úgy működnek, mint a pointerek: ha függvényhívás során átadod, vagy másik változóba lemásolod, akkor csak a referencia másolódik le. Így ha függvénynek átadsz egy nagy elemszámú tömböt, akkor annak csak a referenciáját másolja le. Emiatt tudod függvényben módosítani az átadott objektumokat. Ezek tekintetében szerintem nincs szükséged pointerre.
Néhány szó a ref kulcsszóhoz: erre általában akkor van szükség, amikor a nem szeretnénk, hogy az objektumra mutató referencia lemásolódjon egy függvényhívás során. Megfigyelheted, hogy bár olyat tudsz, hogy egy átadott objektumot függvényen belül módosítasz, de olyat már nem, hogy ezt újra létrehozd. Ilyenkor ugyanis a lemásolt referenciamutatóra hozol létre egy új objektumot, nem pedig az eredetire. Ha tehát olyat szeretnél, hogy függvényen belül hozod létre azt az objektumot, aminek a 'változója' paraméterben érkezik, akkor használj refet. Minden más esetben a referenciatípus tökéletesen pointerként viselkedik mindenféle fejfájás nélkül. Unsafe kódot nem nagyon kellene használni.
Érték típusok esetén érdemes figyelni a nagy másolgatásokra. Ezek könnyen felismerhetőek, ugyanis default inicializálódnak, és nem vehetnek fel null értéket (mivel nem egy referencia). Ilyen pl a struct.
8) nagyon nem. Ez inkább a hiányosságaim mutatja, hogy nem értem vagy értettem a garbage collector működését.
Egyébkémt köszönöm szépen mindenkinek a válaszát. Főleg a kettesnek és a négyesnek.
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!