Ik heb onderstaande classes/interfaces gedefinieerd:
List<T> implementeerd alles uit de IMyCollection al, behalve ICloneable. Wat is nu de manier om de methode Clone() te implementeren, waarbij alle elementen uit de lijst ook gecloned worden?
In eerste instantie dacht ik zoiets:
Het probleem van bovenstaand is, dat als ik dit definieer
de Clone(), van een MyIetsCollection -instantie, een object van het type MyCollection<T> teruggeeft. Dit kan niet gecast worden naar een MyIetsCollection .
M'n volgende poging was:
Helaas levert dit geen -soort van- deep copy op. Wanneer ik iets in de originele collection verander, verandert dit ook in de geclonede collection, en andersom.
Ik zit even vast... hoe dit te doen?
code:
1
2
3
4
5
6
| public interface IMyCollection : IList, ICollection, IEnumerable, ICloneable
{}
public class MyCollection<T> : List<T>, IMyCollection
where T : ICloneable
{} |
List<T> implementeerd alles uit de IMyCollection al, behalve ICloneable. Wat is nu de manier om de methode Clone() te implementeren, waarbij alle elementen uit de lijst ook gecloned worden?
In eerste instantie dacht ik zoiets:
code:
1
2
3
4
5
6
7
| public object Clone()
{
MyCollection<T> clone = new MyCollection<T>();
foreach(T item in this)
clone.Add(item.Clone());
return clone;
} |
Het probleem van bovenstaand is, dat als ik dit definieer
code:
1
2
| public MyIetsCollection : MyCollection<Iets>
{} |
de Clone(), van een MyIetsCollection -instantie, een object van het type MyCollection<T> teruggeeft. Dit kan niet gecast worden naar een MyIetsCollection .
M'n volgende poging was:
code:
1
2
3
4
5
6
7
8
9
10
| public object Clone()
{
MyCollection<T> clone = this.MemberWiseClone() as IMyCollection;
for(int i=0; i<this.Count; i++)
{
clone[i] = ((T)this[i]).Clone();
}
return clone;
} |
Helaas levert dit geen -soort van- deep copy op. Wanneer ik iets in de originele collection verander, verandert dit ook in de geclonede collection, en andersom.
Ik zit even vast... hoe dit te doen?
[ Voor 5% gewijzigd door Verwijderd op 17-07-2006 17:04 . Reden: paar foutjes er uit ]