让代码更简单

VisionPro中Clone方法克隆工具对象介绍

重要:本文最后更新于2020-11-27 15:35:22,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

Clone这个概念在很多编程语言中都有,C#也一样,但是作为业余编程人员我们一般很少用,很多人可能都不知道它的作用,下面我简单介绍下这个方法的作用及在VisionPro中使用Clone方法克隆工具的方法及原因。

大家应该有遇到这样一种情况。假设我们有一个person类,现在有三个人,那么代码这样写。

复制
person A=new person();
person B=new person();
person C=new person();

有人这样写代码。

复制
person A=new person();
person B=A;
person C=A;

问题来了,当你修改B、C这两个对象属性或者内容时,你会发现A对象也会随之变化,这三个人并不是单独的个体,在C#中它们使用的是同一块内容,B、C仅仅是指针的作用罢了。

使用Clone克隆方法复制就不会存在上述问题。

复制
person A=new person();
person N=A.Clone() as person;
person M=A.Clone() as person;

好了,问题已经产生,下面以visionpro举例。

The Clone function implemented by the CogToolBlock and CogToolGroup objects does not work correctly: the links between tools are not properly constructed in the cloned object.

This problem affects any copy that you make of those objects.

康耐视官方称:由CogToolBlock和CogToolGroup对象实现的克隆功能无法正常工作:在克隆的对象中,工具之间的链接没有正确构造。此问题会影响对这些对象所做的任何复制。

康耐视建议我们不要使用Clone功能,但据我查询文档得知,其实在CogSerializer类中还提供了一个深度复制克隆的方法DeepCopyObject,它可以解决对象复制后没有连接线的问题。据我测试,改方法可靠,放心使用。

复制
CogToolGroup B=CogSerializer.DeepCopyObject(A) as CogToolGroup;

康耐视官方还提供了一个方法,大家可以参考下。

复制
public static CogToolGroup CopyToolGroup(CogToolGroup aToolGroup)
{
CogToolGroup newToolGroup = null;
using(System.IO.MemoryStream memStream = new System.IO.MemoryStream(1024 * 1024))
{
CogSerializer.SaveObjectToStream(aToolGroup, memStream);
memStream.Position = 0; 
newToolGroup = CogSerializer.LoadObjectFromStream(memStream) as CogToolGroup;
}
return newToolGroup;
}

简单使用

复制
CogToolGroup A =XXX这里看你的情况是加载文件还是得到对象。
CogToolGroup B=CopyToolGroup(A);

感觉很棒!可以赞赏支持我哟~

6 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐