Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izbeci referenciranje objekata???

[es] :: .NET :: Kako izbeci referenciranje objekata???

[ Pregleda: 2432 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.dynamic.sbb.co.yu.

Sajt: bincode-entertainment.com


Profil

icon Kako izbeci referenciranje objekata???21.12.2007. u 17:42 - pre 198 meseci
Imam sledeci problem - imam jedno stablo (npr. TreeNode node1). Kada napravim novi TreeNode na sledeci nacin: TreeNode node2 = node1, sve izmene koje radim na node2, prenose se i na node1. Konkretno, imam neke informacije chuvane u tagovima, i u node2 treba da ih mnozim, ali nije vazno to, vazno je da posle mnozenja na oba mesta imam izmnozene tagove, a meni treba samo na drugom. Imate li neke ideje kako da ovo zaobidjem?
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
*.adsl-1.sezampro.yu.



+2 Profil

icon Re: Kako izbeci referenciranje objekata???21.12.2007. u 18:24 - pre 198 meseci
Da li si probao sa Clone() ??
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako izbeci referenciranje objekata???21.12.2007. u 18:54 - pre 198 meseci
Nad TreeNode-om mozes da izvedes Clone() kao sto ti Pharos preporucuje posto TreeNode imlementira ICloneable, samo imaj jednu stvar u vidu, ovde Clone() ne klonira samo node nego i celo stablo ispod tog node-a, tako da ces verovatno dobiti vise nego sto ti treba

Mozda bi ti bilo jednostavnije da promenis logiku koda nego da kopiras objekte, npr da ne baziras novi node na starom nego da jednostavno kreiras kompletno novu instancu node-a.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Kako izbeci referenciranje objekata???21.12.2007. u 19:22 - pre 198 meseci
Pri tome mozes da obrises sve child-ove nakon kloniranja (pretpostavljam da je to prva star koja padne na pamet) ali obrati paznju da ako imas dosta takvih radnji aplikacija moze da zauzme prilicno memorije dok GC ne izvrsi ciscenje.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
79.101.168.*

Jabber: DarkMan


Profil

icon Re: Kako izbeci referenciranje objekata???22.12.2007. u 15:31 - pre 198 meseci
Citat:
trodon: ...Kada napravim novi TreeNode na sledeci nacin: TreeNode node2 = node1, sve izmene koje radim na node2, prenose se i na node1.

U sustini ti nisi napravio novi node, ti si napravio novu promenljivu node2 koja je referenca node1.
Mozda bi ti pomoglo da napravis svoju klasu koja nasledjuje TreeNode pa u nju dodavati dodatna polja i svojstva koja ti trebaju, opet zavisi od toga sta ti u stvari zelis da postignes.
Na primer:
Code:

    public class TreeNodeEx: TreeNode
    {
        public object Tag1 = null;
        public object Tag2 = null;
        public TreeNodeEx(string text) : base(text) { }
    }

    TreeView tree = new TreeView();
    tree.Nodes.Add(new TreeNodeEx("proba1"));
    tree.Nodes.Add(new TreeNodeEx("proba2"));
    tree.Nodes.Add(new TreeNodeEx("proba3"));

    TreeNodeEx node1 = tree.Nodes[0] as TreeNodeEx;
    if(node1 != null) Console.WriteLine(node1.Text);

 
Odgovor na temu

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.dynamic.sbb.co.yu.

Sajt: bincode-entertainment.com


Profil

icon Re: Kako izbeci referenciranje objekata???25.12.2007. u 23:36 - pre 198 meseci
Probao sam sledece:
TreeNode mNode = (TreeNode)tView.Nodes[0].Clone();
ali dobijam isto shto i pre - referencu na tView.Nodes[0]... Kako, nije mi jasno... Shto se tiche childova chvora koji mi treba, upravo mi je to i potrebno, dakle node sa svom svojom decom. Stablo mi nije toliko veliko, pa se i ne oseca mnogo zauzimanje memorije, ali josh nisam uspeo da otklonim referenciranje... Nije mi jasno onda chemu sluzi metoda Clone()?
DarkMan, tvoja ideja i nije tako losha, ali bi mi bilo znatno jednostavnije da mogu na neki drugi nachin da to reshim. Clone() bi bio idealan, ali ne funkcionishe... Imate li nekih ideja zbog chega je to tako?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 09:07 - pre 198 meseci
Clone() funkcionise sigurno. Kako uopste znas da ne radi? Iz debagera ti ne mozes da vidis interni pointer reference, tako da u debageru mNode i Nodes[0] izgledaju isto, probaj da promenis neki property mNode-a pa vidi da li se i dalje reflektuje na Nodes[0]....
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.dynamic.sbb.co.yu.

Sajt: bincode-entertainment.com


Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 15:43 - pre 198 meseci
To sam i probao. Naime, odradim sledece:
TreeNode mNode = ((TreeNode)tView.Nodes[0]).Clone();
multiplyTags(mNode);

Da ne objashnjavam u dubinu, navedena metoda po nekom principu mnozi tagove mNode-a. Posle mnozenja (na tView sam stavio event afterselect gde mi u text box-u ispisuje tag selektovanog chvora), promene se i dalje reflektuju na original. J***m mu mater, ne znam shta mu je. Ako neko od vas ima vremena, moze li da uradi slichan test, i ako to radi, da mi pokaze kako je odradjeno. Stvarno bi mi znachilo. Gore navedeni kod je gotovo identichan onome u mojoj aplikaciji, tako da verujem da imate sliku shta treba da se odradi. Unapred hvala svima na pomoci.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
77.46.176.*

Jabber: DarkMan


Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 16:02 - pre 198 meseci
Citat:
trodon: Ako neko od vas ima vremena, moze li da uradi slichan test, i ako to radi, da mi pokaze kako je odradjeno. Stvarno bi mi znachilo.

Bolje ti nama da ili taj kod ili neki primer sa delom koda koji ti je problematican pa da vidimo u cemu je problem.
 
Odgovor na temu

[es] :: .NET :: Kako izbeci referenciranje objekata???

[ Pregleda: 2432 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.