|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2019/10/19 15:48:40 |
标题: |
Delphi对象复制来讨论下 指点下 |
浏览:1366 |
|
加入我的收藏 |
楼主: |
Tobject 父类
如何深度拷贝 实现对象复制 克隆?
----------------------------------------------
- |
作者: |
|
2019/10/19 17:13:42 |
1楼: |
我的理解是delphi的对象复制一般用Assign,从而依赖于AssignTo的实现,如果每一个需要的层次都实现了AssignTo,那么就可以实现深度拷贝了。 当然,有些类/类库会自己实现一套Clone函数,那就是另外一回事了。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2019/10/19 19:25:39 |
2楼: |
@iamdream
只有TPersistent 系列的才有Assign
Tobject的没有。
----------------------------------------------
-
|
作者: |
|
2019/10/19 20:21:00 |
3楼: |
我知道,你可以找一下TObject的定义,它只有方法和过程,没有属性,因此不存在需要复制的属性(新版里有RefCount/Disposed,这些属性复制了也没什么意义)。 如果你自己定义的类直接派生于TObject,那直接写个Assign不就得了?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2019/10/19 21:21:36 |
4楼: |
@iamdream
并非我自己的类。
此事起因是 想复制 TQueue<T> 然后衍生出来这个问题
----------------------------------------------
-
|
作者: |
|
2019/10/20 10:38:23 |
5楼: |
可以自己实现一个Clone方法,Copy必要的数据. 要不就Assign
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
|
作者: |
|
2019/10/20 14:29:09 |
6楼: |
@doersoft
假如克隆TQueue<T> 就只能遍历 导入。。。
----------------------------------------------
-
|
作者: |
|
2019/10/20 15:02:34 |
7楼: |
泛类,本身就是list..不遍历,那直接引用...同一个地址试试。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
|
作者: |
|
2019/10/20 15:20:46 |
8楼: |
Unicode版本的Delphi逐步完善了RTTI,你可以试着用RTTI。 不过,有源代码的话,还是自己写Clone方法,或完善Assign/AssignTo比较好,容易维护。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2019/10/21 13:22:56 |
9楼: |
@iamdream
TObject父类是没有Assign/AssignTo的
只有TPersistent 父类 才有
假如我要克隆个队列TQueue<T> 就没招了。。只能A队列弹出 B队列压入。
----------------------------------------------
-
|
作者: |
|
2019/10/22 16:29:13 |
10楼: |
我觉得,要复制对象的场景不多。先搞清楚为啥要复制。也许需求就错了。
----------------------------------------------
-
|
作者: |
|
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/
|
作者: |
|
2019/10/23 12:02:23 |
12楼: |
对象复制最麻烦的问题就是,对象里面还有对象,可能有 N 层。你究竟想复制多少层?每一层,是复制对象的引用,还是想复制其内容?
----------------------------------------------
-
|
作者: |
sspeak (sspeak) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/10/24 1:50:32 |
13楼: |
我觉得还是对象或record的存储比较迫切,如果有object/record到string的相互转换,那就很有用.
----------------------------------------------
-
|
|