【发布时间】:2011-12-21 20:31:19
【问题描述】:
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
【问题讨论】:
-
你是在 VS 中这样做还是在 Delphi 2010 中使用 Prism
-
这取决于 - 您是否希望在遇到赋值语句时自动调用这些函数? (a la C++ 复制构造函数) - 如果是这样,答案是否定的。
-
@Damien_The_Unbeliever 不,调用
databaseConnection.Assign(font)可以正常工作(请记住,我将编写知道如何将字体复制到 DatabaseConnection 的逻辑)
标签: c# .net variable-assignment