让代码更简单

当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

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

淘宝1元包邮活动入口:https://m.tb.cn/h.4oO4pW3或复制淘口令 ¥Ok7kXblcVET¥
重要:本文最后更新于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);

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

赞(1) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝