Clone metodu
İmzası şöyledir.
MemberwiseClone() kullanılır. Eğer sınıfın sadece primitive alanlardan oluşuyorsa şöyle yaparız.
Eğer sınıf içinde List,Dictionary gibi alanlar varsa bu alanları kodla çoklamak gerekir. Şöyle yaparız.
İmzası şöyledir.
object ICloneable.Clone();
Şöyle yaparız.public class Foo : ICloneable
{
object ICloneable.Clone()
{
...
}
}
Ancak Clone metodunun object dönmesi hoş değil. O yüzden nesnenin kendi tipini dönmek için şöyle yaparız.public class Foo : ICloneable
{
public Tuple<string, string> pair { get; set; }
public double Signal { get; set; }
public double SigmaMove { get; set; }
public DateTime Date { get; set; }
public Foo (Foo right)
{
pair = right.pair; Signal = right.Signal ; SigmaMove = right.SigmaMove; Date = right.Date; }
#region ICloneable Members
public Information Clone () { return new Information(this); }
object ICloneable.Clone ()
{
return Clone();
}
#endregion
}
Primitive Alanlar İçinMemberwiseClone() kullanılır. Eğer sınıfın sadece primitive alanlardan oluşuyorsa şöyle yaparız.
public class Vehicle : ICloneable
{
public int VehicleId { get; set; }
public double IdleVolume
...
public object Clone()
{
return this.MemberwiseClone();
}
}
Reference Alanlar İçinEğer sınıf içinde List,Dictionary gibi alanlar varsa bu alanları kodla çoklamak gerekir. Şöyle yaparız.
public object Clone()
{
Foo clone = this.MemberwiseClone();
List<Order> clonedOrders = new List<Order>();
foreach (Order order in this.FilledOrders)
clonedOrders.Add((Order)order.Clone());
clone.FilledOrders = clonedOrders;
return clone;
}
Hiç yorum yok:
Yorum Gönder