Assign方法必须自己写,比如在Delphi的代码中,就有如下
procedure TFieldDef.Assign(Source: TPersistent);
var
  I: Integer;
  S: TFieldDef;
begin
  if Source is TFieldDef then
  begin
    if Collection <> nil then Collection.BeginUpdate;
    try
      S := TFieldDef(Source);
      {FieldNo is defaulted}
      Name := S.Name;
      DataType := S.DataType;
      Size := S.Size;
      Precision := S.Precision;
      Attributes := S.Attributes;
      InternalCalcField := TFieldDef(Source).InternalCalcField;
      if HasChildDefs then ChildDefs.Clear;
      if S.HasChildDefs then
        for I := 0 to S.ChildDefs.Count - 1 do
          with AddChild do Assign(S.ChildDefs[I]);
    finally
      if Collection <> nil then Collection.EndUpdate;
    end;
  end else inherited;
end;此外,没有什么其他方法。

解决方案 »

  1.   

    我就是不想重写assign()方法,有一些对象有一个Clone的方法,不知道有没有什么方法可以克隆一个对象呢?
      

  2.   

    一个对象如果自己没派生它的.Assign()方法就没法复制它,
    你只有一个属性一个属性地赋值,没有更好的方法,
    因为对象的内部结构很复杂,有很多指针,并不是连续的
    一片区域.