DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: delphixeyong
今日帖子: 3
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2019/10/19 15:48:40
标题:
Delphi对象复制来讨论下 指点下 浏览:450
加入我的收藏
楼主: Tobject 父类

如何深度拷贝 实现对象复制 克隆?
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/10/19 17:13:42
1楼: 我的理解是delphi的对象复制一般用Assign,从而依赖于AssignTo的实现,如果每一个需要的层次都实现了AssignTo,那么就可以实现深度拷贝了。
当然,有些类/类库会自己实现一套Clone函数,那就是另外一回事了。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2019/10/19 19:25:39
2楼: @iamdream

只有TPersistent 系列的才有Assign

Tobject的没有。
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/10/19 20:21:00
3楼: 我知道,你可以找一下TObject的定义,它只有方法和过程,没有属性,因此不存在需要复制的属性(新版里有RefCount/Disposed,这些属性复制了也没什么意义)。
如果你自己定义的类直接派生于TObject,那直接写个Assign不就得了?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2019/10/19 21:21:36
4楼: @iamdream

并非我自己的类。

此事起因是 想复制 TQueue<T> 然后衍生出来这个问题
----------------------------------------------
-
作者:
男 doersoft (XMG-ZY) ★☆☆☆☆ -
普通会员
2019/10/20 10:38:23
5楼: 可以自己实现一个Clone方法,Copy必要的数据.
要不就Assign
----------------------------------------------
delphi Flutter&Vue|golang rhinoslink
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2019/10/20 14:29:09
6楼: @doersoft

假如克隆TQueue<T> 就只能遍历 导入。。。
----------------------------------------------
-
作者:
男 letianwuji (乐天无极) ▲▲▲△△ -
注册会员
2019/10/20 15:02:34
7楼: 泛类,本身就是list..不遍历,那直接引用...同一个地址试试。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/10/20 15:20:46
8楼: Unicode版本的Delphi逐步完善了RTTI,你可以试着用RTTI。
不过,有源代码的话,还是自己写Clone方法,或完善Assign/AssignTo比较好,容易维护。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2019/10/21 13:22:56
9楼: @iamdream

TObject父类是没有Assign/AssignTo的

只有TPersistent  父类 才有

假如我要克隆个队列TQueue<T>  就没招了。。只能A队列弹出 B队列压入。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2019/10/22 16:29:13
10楼: 我觉得,要复制对象的场景不多。先搞清楚为啥要复制。也许需求就错了。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2019/10/22 18:50:39
11楼: CnPack组件包里有个TCnAssignablePersistent类,可以通过RTTI复制子类实例的所有简单属性。

https://github.com/cnpack/cnvcl/blob/master/Source/Common/CnClasses.pas
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2019/10/23 12:02:23
12楼: 对象复制最麻烦的问题就是,对象里面还有对象,可能有 N 层。你究竟想复制多少层?每一层,是复制对象的引用,还是想复制其内容?
----------------------------------------------
-
作者:
男 sspeak (sspeak) ★☆☆☆☆ -
盒子活跃会员
2019/10/24 1:50:32
13楼: 我觉得还是对象或record的存储比较迫切,如果有object/record到string的相互转换,那就很有用.
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行33.20313毫秒 RSS