Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 3.674 pregleda

Najnovija ↓

Kako izbeci referenciranje objekata??? 21.12.2007. u 18:42 · pre 229 meseci #1
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?
Re: Kako izbeci referenciranje objekata??? 21.12.2007. u 19:54 · pre 229 meseci #3
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.
Potpis
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ć
Re: Kako izbeci referenciranje objekata??? 21.12.2007. u 20:22 · pre 229 meseci #4
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.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Kako izbeci referenciranje objekata??? 22.12.2007. u 16:31 · pre 229 meseci #5
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);

Re: Kako izbeci referenciranje objekata??? 26.12.2007. u 00:36 · pre 229 meseci #6
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?
Re: Kako izbeci referenciranje objekata??? 26.12.2007. u 10:07 · pre 229 meseci #7
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]....
Potpis
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ć
Re: Kako izbeci referenciranje objekata??? 26.12.2007. u 16:43 · pre 229 meseci #8
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.
Re: Kako izbeci referenciranje objekata??? 26.12.2007. u 17:02 · pre 229 meseci #9
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme