Delphi имеет стандартный механизм, где один объект может быть скопирован с другого, перефразируемый здесь как:
class Persistent
{
protected AssignError(Persistent source)
{
throw new ConvertError("Cannot assign a {0} to a {1}", source.GetType().Name, this.GetType().Name);
}
protected virtual AssignTo(Persistent destination)
{
destination.AssignError(this);
}
public virtual Assign(Persistent source)
{
source.AssignTo(this);
}
}
Имеет ли .NET FCL канонический синтаксис копирования объектов между собой?
например:.
interface IPersistent
{
public virtual Assign(Object source);
}
public class User : IPersistent
{
private Image avatarThumbnail;
private String name;
public override Assign(Object source)
{
if (source is User)
{
this.avatarThumbnail = source.avatarThumbnail;
this.name = source.Name;
}
else if (source is Image)
avatarThumbnail = (Image)source;
else if (source is DirectoryEntry)
name = ((DirectoryEntry) source).Firstname + " " + ((DirectoryEntry) source).Lastname;
else
throw new AssignError("Assign from {0}", source.GetType());
}
}
Да, я только что изобрел стандартный IPersistent
интерфейс; но есть ли уже механизм для копирования объектов между собой?
Обновление
Примечание : я говорю о напротив клонирования объекта.
User originalUser = new User();
User theClone = originalUser.Clone();
theClone.Lastname = "Guyer";
originalUser.Assign(theClone);
Или мне даже не нужен клон:
User u = new User();
u.Assign(salesOrder); //copy name/e-mail from the sales order
или
SalesOrder s = new SalesOrder();
s.SalesOrderDate = DateTime.Now;
User customer = new Customer("Kirsten");
s.Assign(user); //copy sold-to/ship-to information from the user