Zdravím všechny,
mám začátečnickej dotaz.
Mám třídu např.TClass {int x;} a mám založeny dvě instance iA a iB. Potřeboval bych poradit, zda je v .NET nějaká funkce, pomocí které jednoduše překopíruji data z jedné třídy iA do druhé iB, tak že když poté změním v iB hodnoty, tak se ty hodnoty budou měnit pouze v iA. Prostým = to samozřejmě nejde.
Dík Petr
Fórum › .NET
Kopirovani tridy
Asi by bylo dobre lehce vylepsit popis chovani, ktere ocekavas, ale z toho, co si myslim, ze chapu mi prijde, ze serializace je za danych okolnosti spis kanon na vrabce...
Muzes vlozit nejakou rozumnou ukazku kodu ?
OK, je to asi takto. Mám hlavní okno a v něm list, kde mám cca 100 až 200 objektů. Potřebuji otevřít okno, kde nějak postupně přenastavím klidně všechny objekty. No a potřebuji uživateli dát možnost zavřít okno bez možnosti potvrzení změn. Tedy vrátit se k původním hodnotám.
public class TTrida {
public int Hodnota;
...
}
...
TTrida t1 = new TTrida ();
TTrida t2 = new TTrida ();
...
t1.Hodnota = 5;
t2 = KopirovaciFunkce(t1); // kopirovani vsech dat z t1 do t2
...
a ted muzu t2 libovolne nastavovat a hodnoty v t1 zustavaj puvodni :-D
Ja to v C++ delal pomoci memcpy.
Pokud budu v TTrida mit pouze hodnotove typy, pak by postacilo:
public class TTrida
{
public int Hodnota;
public TTrida Clone()
{
return (TTrida)MemberwiseClone();
}
}
a pouziji to TTrida t1 = new TTrida();
t1.Hodnota = 5;
TTrida t1Copy1 = t1.Clone();
a opravdu mohu vlastnost Hodnota menit libovolne
Problem nastane pokud se rozhodnu pouzivat referencni typy, pak je treba napsat trochu vice radek - viz:
TTrida t1 = new TTrida();
t1.Hodnota = 5;
t1.Button = new Button();
t1.Description = "Popiska1";
TTrida t1Copy1 = t1.Clone();
bool result1 = object.ReferenceEquals(
t1.Button, t1Copy1.Button); //true
TTrida t1Copy2 = t1.CloneDeep();
bool result2 = object.ReferenceEquals(
t1.Button, t1Copy2.Button); //false
TTrida s metodou CloneDeep je v priloze.PS: priklad v priloze TTrida.txt kopiruje pouze a jen pole z tridy TTrida, nikoliv napriklad vlastnosti ! Takze pro zcela obecne pouziti by bylo treba si s tim jeste trochu pohrat.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Změna vlastnosti třídy Windows1 z jiné třídy — založil davedpe
Přístup k objektům jedné třídy ze třídy druhé — založil ProgDan
C++ - Třídy (Export funkcí z třídy do jiné) — založil CodeHustla
Kopírování — založil Paulí
Tlacitko a kopirovani — založil
Moderátoři diskuze