Forum » Programiranje » Prireditev class = class
Prireditev class = class
ropo009 ::
Hi!
Ima definiran class (visual c#) in potem hočem narediti tole:
trajanje x10 = new trajanje();
trajanje x20 = new trajanje();
x10.skp_dni = 100;
x20 = x10;
x20.skp_dni = 200;
In seveda imata potem x10.skp_dni in x20.skp_dni
enako vrednost. Kaj delam narobe?
Rabim kopijo prvega, kasneje namreč spreminjam oba...
Lp,
Robert
Ima definiran class (visual c#) in potem hočem narediti tole:
trajanje x10 = new trajanje();
trajanje x20 = new trajanje();
x10.skp_dni = 100;
x20 = x10;
x20.skp_dni = 200;
In seveda imata potem x10.skp_dni in x20.skp_dni
enako vrednost. Kaj delam narobe?
Rabim kopijo prvega, kasneje namreč spreminjam oba...
Lp,
Robert
- spremenilo: ropo009 ()
tomaz_sres ::
Zakaj pa ne preneseš vrednost skp_dni iz x10 na x20 namesto, da ga kopiraš?
Lep pozdrav, Tomaž Sreš, http://www.sres.si
morbo ::
Narobe delaš to da x20 = x10 pomeni da kažeta obe na isti objekt.
Če rabiš kopijo, boš pač moral ročno kopirati vse primitivne spremenljivke iz enega na drugega.
Če rabiš kopijo, boš pač moral ročno kopirati vse primitivne spremenljivke iz enega na drugega.
tomaz_sres ::
Lahko uporabiš Clone() sam boš moral zadevo spisat za svoj class.
Tule je nekaj na to temo:
http://developerscon.blogspot.com/2008/...
Tule je nekaj na to temo:
http://developerscon.blogspot.com/2008/...
Lep pozdrav, Tomaž Sreš, http://www.sres.si
ropo009 ::
Je potem vsaj kaka možnost, da dobim seznam vseh variabel v classu? Kakšen iterator mogoče?
tomaz_sres ::
Poglej si ta primer, ki sem ga na hitro skup dal:
http://www.sres.si/files/C1IntoC2.rar
Serializacija je z pred leti narejenega projekta, kjer sem object prek XmlSerializer spravil v XML in shranil v bazo in pri prikazu nazaj v object.
http://www.sres.si/files/C1IntoC2.rar
Serializacija je z pred leti narejenega projekta, kjer sem object prek XmlSerializer spravil v XML in shranil v bazo in pri prikazu nazaj v object.
Lep pozdrav, Tomaž Sreš, http://www.sres.si
boogie_xlr ::
overloadaj operator = (nisem ziher, če se da)
public static void operator =(trajanje &t1, trajanje &t2) { //skopiras vse iz t2 v t1 //recimo: t1.skp_dni = t2.skp_dni; }
Mavrik ::
Je potem vsaj kaka možnost, da dobim seznam vseh variabel v classu? Kakšen iterator mogoče?
Ne.
To narediš tako, da overridaš clone() metodo in ustvariš nov konstruktor z vsemi parametri. Če jih maš preveč, potem imaš najverjetneje narobe zasnovan razred in ga moraš razbiti na več manjših.
The truth is rarely pure and never simple.
tomaz_sres ::
Luštno tole z ShallowCopy.
V class dodaš metodo:
potem pa prirediš:
V class dodaš metodo:
public trajanje ShallowCopy() { return (trajanje)this.MemberwiseClone(); }
potem pa prirediš:
x20 = x10.ShallowCopy();
Lep pozdrav, Tomaž Sreš, http://www.sres.si
ropo009 ::
Ja ShallowCopy sicer dela, dokler ni class v classu - potem kopira samo referenco. Razred je sicer že razbit, a vsega žal ni mogoče, ker ni smiselno drobljenje.
Sem naredil svojo metodo v classu in ročno kopiram vse variable. Bo pač treba pazit, da kaj ne pozabim...
Lp,
R.
Sem naredil svojo metodo v classu in ročno kopiram vse variable. Bo pač treba pazit, da kaj ne pozabim...
Lp,
R.
Spura ::
Je potem vsaj kaka možnost, da dobim seznam vseh variabel v classu? Kakšen iterator mogoče?
Ne.
To narediš tako, da overridaš clone() metodo in ustvariš nov konstruktor z vsemi parametri. Če jih maš preveč, potem imaš najverjetneje narobe zasnovan razred in ga moraš razbiti na več manjših.
Da se z reflection najbrz... sploh ce je java bean. Pa C# isto najbrz
noraguta ::
sm mislu daj jasn , da nucaš deep copy
There are numerous ways to implement a deep copy operation if the shallow copy operation performed by the MemberwiseClone method does not meet your needs. These include the following:
Call a class constructor of the object to be copied to create a second object with property values taken from the first object. This assumes that the values of an object are entirely defined by its class constructor.
Call the MemberwiseClone method to create a shallow copy of an object, and then assign new objects whose values are the same as the original object to any properties or fields whose values are reference types. The DeepCopy method in the example illustrates this approach.
Serialize the object to be deep copied, and then restore the serialized data to a different object variable.
Use reflection with recursion to perform the deep copy operation.
There are numerous ways to implement a deep copy operation if the shallow copy operation performed by the MemberwiseClone method does not meet your needs. These include the following:
Call a class constructor of the object to be copied to create a second object with property values taken from the first object. This assumes that the values of an object are entirely defined by its class constructor.
Call the MemberwiseClone method to create a shallow copy of an object, and then assign new objects whose values are the same as the original object to any properties or fields whose values are reference types. The DeepCopy method in the example illustrates this approach.
Serialize the object to be deep copied, and then restore the serialized data to a different object variable.
Use reflection with recursion to perform the deep copy operation.
Pust' ot pobyedy k pobyedye vyedyot!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [VB.NET] classOddelek: Programiranje | 730 (637) | korenje3 |
» | [c#] Risanje z miškoOddelek: Programiranje | 1434 (1115) | japol |
» | [c#] Globalne spremenljivke v classuOddelek: Programiranje | 1057 (891) | nightrage |
» | [c#] loopanje po fieldih classaOddelek: Programiranje | 1132 (959) | vojko20 |
» | c# classOddelek: Programiranje | 2277 (1871) | japol |