.[ ČeskéHry.cz ].
Zrušení spojení mezi kopírovanými objekty.

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 4. září 2007, 18:36:08    Předmět: Zrušení spojení mezi kopírovanými objekty. Odpovědět s citátem

Mam tridu "A" a potrebuju naplnit "promenou" zkopirovanim jine instance teto tridy "instance_a" aniz by se vytvorilo mezi nimi spojeni, jako kdyz napr provedu nejakou zmenu v "promena" tak se provede i v " instance_a".

kód:
A promena = instance_a;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 4. září 2007, 18:56:03    Předmět: Odpovědět s citátem

V takovem pripade bud musi byt A hodnotoveho typu (tj. int, double, ..., nebo vytvorena jako struct (v C#) a ne jako class). Pak kazda promenna tohoto typu obsahuje vlastni kopii. Na druhou stranu jsou tam jina omezeni.

Pokud A je referencniho typu (tj. bud je to pole, nebo je zapsana jako class), pak se do promennych typu A neuklada "kopie" te instance, ale jen reference na ni (neco +- jako ukazatel v C++). Pokud chces, aby promenna pracovala s nezavislou kopii, tak si tu kopii musis vytvorit pomoci vlastnich prostredku. Bud pomoci new, pomoci metody MemberwiseClone() nebo pomoci interface ICloneable a metody Clone(). Pouhe = ale vzdy jenom zkopiruje referenci (ten ukazatel) a nikdy nove instance nevytvari.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 4. září 2007, 19:10:40    Předmět: Odpovědět s citátem

JJ, jen doplním, že to opravdu není "spojení", ale že např. v případě
kód:

class A {
  public int x;
}

A a = new A();
A b = a;


jsou proměnné a i b jen dva různé "názvy" pro jedinou instanci. Tedy např. v
kód:

a.x = 42;

se provede zápis jen jednou, ale ta nová hodnota bude vidět jak z a tak z b.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 4. září 2007, 19:58:33    Předmět: Odpovědět s citátem

ok tak dik a nejlepsi bude asi MemberwiseClone() protoze pouzit new by bylo sileny:D teda aspon v mym pripade:)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna