Anfängerfrage CSharp

28/07/2009 - 13:43 von Martin Berger | Report spam
Hallo,

vor drei Jahren hatte ich einen Kursus in C# und bin gerade dabei meine
Kenntnisse zu reaktiviern (ein Projekt steht an). C++ (MFC)
Backgroundwissen ist vorhanden.

Jetzt bin ich gerade bei den Kopierkonstruktoren oder besser: bei der
ICloneable Schnittstelle, d.h. ich will Objekte kopieren, keine
Referenzen. Soweit so gut. Wenn ich eine "einfache" Klasse habe, dann
mache ich meine eigene Clone-Methode.

Wie funktioniert aber das Klonen, wenn meine Klasse von weiteren Klassen
abgeleitet ist? Also ungefàhr so:

- Start Code --
namespace IClonable1
{
class CBase : ICloneable
{
int i;

public CBase()
{
i = 1;
}

public object Clone()
{
CBase tmp = new CBase();

tmp.i = i;

return tmp;
}
}

class CAb1 : CBase, ICloneable
{
int m_i;

new public object Clone()
{
CAb1 x = new CAb1();

//
// wie kopiert man hier die Basisobjekte ?
//

}
}
- Ende Code --


Vielen Dank im voraus für Hinweise!
 

Lesen sie die antworten

#1 Alexander Mueller
28/07/2009 - 19:12 | Warnen spam
Martin Berger schrieb:

Jetzt bin ich gerade bei den Kopierkonstruktoren oder besser: bei der
ICloneable Schnittstelle, d.h. ich will Objekte kopieren, keine
Referenzen. Soweit so gut. Wenn ich eine "einfache" Klasse habe, dann
mache ich meine eigene Clone-Methode.

Wie funktioniert aber das Klonen, wenn meine Klasse von weiteren Klassen
abgeleitet ist? Also ungefàhr so:



Am saubersten u/o effektivsten wàre es, für jede Klasse der
Vererbungshierarchie einen Kopierkonstruktor zu schreiben und
die/den dann in Clone aufzurufen.
Dann gehst Du sicher, dass alles eine "Deep Copy" ist und Clone
ist jeweils ein Einzeiler.

MfG,
Alex



namespace IClonable1
{
class CBase : ICloneable
{
int i;

public CBase()
{
i = 1;
}
public CBase(CBase src)
{
if (null != src)
this.i = src.i;
}
public object Clone()
{
return new CBase(this);
}
}
class CAb1 : CBase, ICloneable
{
int m_i;

public CAb1()
{
m_i = 1;
}
public CAb1(CAb1 src) : base (src)
{
if (null != src)
this.m_i = src.m_i;
}
new public object Clone()
{
return new CAb1(this);
}
}
}

Ähnliche fragen