Avatar billede dr_chaos Nybegynder
05. december 2004 - 20:23 Der er 7 kommentarer og
1 løsning

Hvordan kopierer man et objekts værdi i stedet for bare reference

jeg har et rektangel objekt hvor jeg gerne vil kopiere værdien af dette til et nyt objekt og ikke bare referencen.
Jeg ved at på denne måde kopierer man referencen til objektet
FigurLibary.Rectangle Rect = new FigurLibary.Rectangle(x,y,w,h);
objekt obj = Rect:
og man kan kopiere objekt værdien på denne måde:
FigurLibary.Rectangle Rect = new FigurLibary.Rectangle(x,y,w,h);
            FigurLibary.Rectangle Rect2 = new FigurLibary.Rectangle(Rect.X,Rect.Y, Rect.W,Rect.H);
object obj = Rect2;

Men er der ikke en smartere måde at gøre dette på ?
Kan godt være jeg har byttet rundt på det med reference og værdi.
Ret mig lige hvis jeg har gjort det.
Avatar billede arne_v Ekspert
05. december 2004 - 20:26 #1
Der er ikke nogen generel løsning.

Hvis klassen implementerer ICloneable og har en Clone metode, så kan du:

X x1 = new X();
X x2 = (X)x1.Clone();
Avatar billede dr_chaos Nybegynder
05. december 2004 - 20:41 #2
ok jeg havde håbet at der fandtes en smartere måde.
Så vidt jeg kan forstå findes der det i vb.net eller tager jeg fejl ?
Avatar billede arne_v Ekspert
05. december 2004 - 20:45 #3
Jeg tror at du tager fejl.

Et objekt der ikke kan clones kan vel ikke clones uanset hvilket sprog
man forsøger i.

Alle klasser hvor der giver mening at clone bør implementere ICloneable.
Avatar billede arne_v Ekspert
05. december 2004 - 20:46 #4
(og value typer kan naturligvis altid clones)
Avatar billede dr_chaos Nybegynder
05. december 2004 - 20:52 #5
ok tak for hjælpen smid et svar :)
Avatar billede arne_v Ekspert
05. december 2004 - 20:53 #6
svar
Avatar billede naxosnaxos Nybegynder
05. december 2004 - 21:39 #7
hmm er der ikke tale om der skal laves en Copy constructor rent OO mæsigt, hvilket .NET endnu ikke understøtter pr. default.

Man laver simpelt hen en constructor mere i sin klasse således

public class Foo
{
  int t;
  string r;

  public Foo(){};//alm constructor
  public Foo(Foo foo){this.t = foo.t; this.r = foo.r};//alm constructor

 
}

man kopier simpelthen sine class members i constructoren.
Avatar billede arne_v Ekspert
05. december 2004 - 22:23 #8
C# er noget anderledes end C++.

Man vil skulle skrive:

Foo f1 = new Foo();
Foo f2 = new Foo(f1);

Og det kan man også godt.

Men det anbefalede er brug af ICloneable og Clone.

Og de har ihvertfald en stor fordel. Man behøver ikke kende objektets
type for at kunne clone !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Djurslands Bank

IT-udvikler

Politiets Efterretningstjeneste

CNE-specialist til PET`s indhentningsafdeling

LINK Mobility

Support Specialist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger elementleder til System sektionen i Hvidovre