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);
评论 (0)