Hogyan tudok egy struktúrát felülírni vagy módosítani C#-ban?
Létre akarok hozni egy struct-ot, aminek megadnám a paramétereit, de a későbbiakben módosítanám, a felhasználó igényei szerint. pl:
tárolok benne koordinátákat (X,Y), de később szeretnék hozzáadni még tulajdonságot, vagy a meglévőeket módosítani. Megtehetem? Ha nem, milyen irányba induljak el?
Az hogy pl ebből:
public struct Bookmark
{
}
Az hogy pl ebből:
public struct Bookmark
{
}
Az hogy pl ebből:
public struct Bookmark
{
string nev;
int pozició;
}
Hogy csinálok ilyet:
public struct Bookmark
{
string nev;
int pozició;
Color szin; //ilyet
}
Nos, a struct és a class között van egy olyan különbség, hogy a struct a stack-en tárolódik, míg a class a heap-en. Ezt így kezdésnek erős bevezetés volt, de nézzük meg, mikor érdemes struct-ot használni:
- ha a mérete 16 bájt alatt van (ez csak a változók memóriaigényére vonatkozik)
- egy összetett értéket reprezentál
- ha azt akarod, hogy az állapotát ne lehessen megváltoztatni (ez azt jelenti, hogy ha van egy (4,4) koordinátám, nem akarom átírni (5,4)-re a program futása során - azaz immutable legyen)
Szóval ha van egy ilyened:
struct Coord {
private int x;
private int y;
public int X {
.. get { return this.x; }
}
public int Y {
.. get { return this.y; }
}
public Coord(int x, int y) {
.. this.x = x;
.. this.y = y;
}
}
Ez így eddig oké, mert:
- az állapota nem változtatható meg a program futása során
- mérete 8 bájt (a két int típusú mezője ("változója") 4-4 bájtot foglal)
- egy összetett értéket, egy koordinátát reprezentál.
Arra viszont oda kell figyelni, hogy van még egy különbség a class és a struct közt:
- ha a fene fenét eszik is, a struct-nak mindig lesz egy paraméter nélküli konstruktora
- a class esetében nem feltétlenül van.
Szóval a fenti implementációval felmerülhet egy kérdés: Probléma-e, hogy mindig van neki paraméter nélküli konstruktora? Ha igen, kénytelen vagy class-t használni.
"Az hogy pl ebből:
public struct Bookmark
{
string nev;
int pozició;
}
Hogy csinálok ilyet:
public struct Bookmark
{
string nev;
int pozició;
Color szin; //ilyet
}"
Pont így, hogy később odaírod.
El nem tudom képzelni mit szeretnél kérdezni valójában.
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!