» »

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
  • 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

ropo009 ::

Noter ni samo ta spremenljivka. Jih je kakih 20 in še matrike.

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.

tomaz_sres ::

Lahko uporabiš Clone() sam boš moral zadevo spisat za svoj class.
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.
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 ::

ropo009 je izjavil:

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.

noraguta ::

Pust' ot pobyedy k pobyedye vyedyot!

tomaz_sres ::

Luštno tole z ShallowCopy.

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.

Spura ::

Mavrik je izjavil:

ropo009 je izjavil:

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.
Pust' ot pobyedy k pobyedye vyedyot!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[VB.NET] class

Oddelek: Programiranje
8730 (637) korenje3
»

[c#] Risanje z miško

Oddelek: Programiranje
221434 (1115) japol
»

[c#] Globalne spremenljivke v classu

Oddelek: Programiranje
91056 (890) nightrage
»

[c#] loopanje po fieldih classa

Oddelek: Programiranje
81132 (959) vojko20
»

c# class

Oddelek: Programiranje
342276 (1870) japol

Več podobnih tem