如何将一个对象的值赋给另一个对象?? 可是TUserDefine 没有Assign方法。又该如何???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Move(const Source; var Dest; Count: Integer);行吧 找到一个函数VOID CopyMemory ( PVOID Destination, // address of copy destination CONST VOID *Source, // address of block to copy DWORD Length // size, in bytes, of block to copy );这样应该没问题CopyMemory(B, A, A.InstanceSize); 以前我们就讨论过,除非设计者提供或派生了Assign()方法,否则,没法对对象进行互为赋值,Move与Copy都不行,因为一个对象中往往有动态申请的单元或属性以及指针等,情况很复杂,简单地赋值是不行的,答案的结果就是没有通用的方法. 同样BCB的,我也认为只能一个变量,一个变量的赋值。 xzgyb我用了你的方法,死机两次,都不知道是怎么死的。请问BCB,Assign方法应该怎么写,VCL中哪个类的可以参考?? 从TCollectionItem继承的子类都完成了Assigned方法。你随便找个看看吧。比如在DB单元中的TFieldDef 如果类赋值的话,最好要继承assign方法,以便释放,否则自己要添加释放的方法 Assign()是类设计者设计的,他自已知道应怎样复制一个类(其实也就是复制一些类的属性而已),但他不一定提供Assign(),类的每一次派生都要重新扩充Assign(),所以,你想再设计一个Assign通用办法很困难,你只好将每个对象的属性都赋值一下,可一般人又不愿这样做. 欧,不好意思,我自己瞎试的我是简单用个类interfaceTFA = Class public FI,FJ:Integer; procedure PrintI;end;implementprocedure TFA.PrintI;begin ShowMessage(IntToStr(FI));end;procedure TForm1.ButtonClick(Sender:TObject);var I, J : TFA;begin I := TFA.Create; J := TFA.Create; I.FI := 23; CopyMemory(J, I, I.InstanceSize); J.PrintI; I.Free; J.PrintI; J.Free;end;end.运行没有错误啊,也没有死机,我不知为什么 我不认为拷贝内存就可以解决问题。你上面给的例子很简单。如果类中存在复杂的对象,拷贝内存无非就是拷贝个地址而已,没有真正的拷贝对象。此外,诸如string这种Delphi维护的动态类型,拷贝内存并不能导致其RefCount自增1,如果释放掉原来的对象,新的对象肯定也要出问题。 在Delphi里,怎样把一串16进制的数转换为10进制的数? 用StrToDate把字符串变时间的问题 最近失败的很!! 哪位高手能提供一个带CHECK的TREEVIEW控件? 关于消息的响应和处理的疑问! 关于主从表的问题--如何动态设置主从表? 收不到消息的疑惑!!! 数据库导出到Excel问题,急! 如何将一个ASCII码数据先转换成字符类型,再转换成整形,再转换成十六进制??? 如何将quickrep打印预览中的“close”改成中文??????? 有没有能说中文的TTS库(text to speech)? 高分求助:两台机子如何通过modem来传送文件
行吧
VOID CopyMemory (
PVOID Destination, // address of copy destination
CONST VOID *Source, // address of block to copy
DWORD Length // size, in bytes, of block to copy
);
这样应该没问题
CopyMemory(B, A, A.InstanceSize);
否则,没法对对象进行互为赋值,Move与Copy都不行,因为一个
对象中往往有动态申请的单元或属性以及指针等,情况很复杂,
简单地赋值是不行的,答案的结果就是没有通用的方法.
我用了你的方法,死机两次,都不知道是怎么死的。
请问BCB,Assign方法应该怎么写,VCL中哪个类的可以参考??
比如在DB单元中的TFieldDef
但他不一定提供Assign(),类的每一次派生都要重新扩充Assign(),所以,
你想再设计一个Assign通用办法很困难,你只好将每个对象的属性都赋值一下,可一般人
又不愿这样做.
我是简单用个类
interfaceTFA = Class
public
FI,FJ:Integer;
procedure PrintI;
end;
implement
procedure TFA.PrintI;
begin
ShowMessage(IntToStr(FI));
end;procedure TForm1.ButtonClick(Sender:TObject);
var
I, J : TFA;
begin
I := TFA.Create;
J := TFA.Create;
I.FI := 23;
CopyMemory(J, I, I.InstanceSize);
J.PrintI;
I.Free;
J.PrintI;
J.Free;
end;
end.
运行没有错误啊,也没有死机,我不知为什么
此外,诸如string这种Delphi维护的动态类型,拷贝内存并不能导致其RefCount自增1,如果释放掉原来的对象,新的对象肯定也要出问题。