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

Kako izbeci referenciranje objekata???

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

[ Pregleda: 598 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

trodon
Bojan Petrovic
Beograd

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

Sajt: (none)


Profil

icon Kako izbeci referenciranje objekata???21.12.2007. u 17:42

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?

Bolje 10 shestica, nego 6 desetki!
>>>http://free-game-downloads.mosw.com/<<<
21.12.2007. u 17:42 

Pharos
Pančevo

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



Profil

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

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

Moderator
Član broj: 17944
Poruke: 1679
195.252.78.*



Profil

icon Re: Kako izbeci referenciranje objekata???21.12.2007. u 18:54
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.
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
▪ Illegal aliens have always been a problem in the United States. Ask any Native American
21.12.2007. u 18:54 

Shadowed
.NET developer

SuperModerator
Član broj: 649
Poruke: 8733
212.200.70.*

Sajt: www.diskusije.net


Profil

icon Re: Kako izbeci referenciranje objekata???21.12.2007. u 19:22
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.
21.12.2007. u 19:22 

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 472
79.101.168.*



Profil

icon Re: Kako izbeci referenciranje objekata???22.12.2007. u 15:31
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);

22.12.2007. u 15:31 

trodon
Bojan Petrovic
Beograd

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

Sajt: (none)


Profil

icon Re: Kako izbeci referenciranje objekata???25.12.2007. u 23:36
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?
Bolje 10 shestica, nego 6 desetki!
>>>http://free-game-downloads.mosw.com/<<<
25.12.2007. u 23:36 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

Moderator
Član broj: 17944
Poruke: 1679
195.252.78.*



Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 09:07
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]....
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
▪ Illegal aliens have always been a problem in the United States. Ask any Native American
26.12.2007. u 09:07 

trodon
Bojan Petrovic
Beograd

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

Sajt: (none)


Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 15:43
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.
Bolje 10 shestica, nego 6 desetki!
>>>http://free-game-downloads.mosw.com/<<<
26.12.2007. u 15:43 

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 472
77.46.176.*



Profil

icon Re: Kako izbeci referenciranje objekata???26.12.2007. u 16:02
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.
26.12.2007. u 16:02 

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

[ Pregleda: 598 | Odgovora: 8 ]

Postavi temu Odgovori

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