我想要一个 复制例程,它在基类中定义为虚拟,稍后在派生类中实现。 问题是,由于参数不同,不允许覆盖该过程。 有没有解决与德尔福的班级模型或我的方法是完全错误的?如何定义子类中参数不同的虚函数?
type
TCar = class
procedure CopyFrom(c: TCar); virtual;
end;
TChrysler = class(TCar)
FColor: Integer;
procedure CopyFrom(c: TChrysler); override;
end;
procedure TCar.CopyFrom(c: TCar);
begin
//virtual
end;
procedure TChrysler.CopyFrom(c: TCrysler);
begin
FColor := c.FColor;
end;
var
Car1, Car2: TCar;
begin
Car1 := TChrysler.Create;
Car2 := TChrysler.Create;
Car2.CopyFrom(Car1); //TChrysler.CopyFrom should be called.
end;
您正在寻找['reintroduce'(HTTP:// docwiki .embarcadero.com/RADStudio/XE3/EN /方法#重新引入)。 – TLama 2013-03-27 23:19:13
看起来像TPersistent.Assign,我讨厌它发生。 – 2013-03-27 23:19:31
Delphi中的典型方法是提供'Assign'和'AssignTo'方法,你可以使用'Car2.Assign(Car1);'。如果您查看VCL源代码,可以看到许多使用此技术的示例,这些示例可以与具有新属性的派生类正常工作。例如,参见'Classes'单元中的'TStringList.Assign'。 – 2013-03-27 23:28:14