起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 351|回复: 7

请问循环引用是怎么回事?

[复制链接]
发表于 2004-3-25 17:25:22 | 显示全部楼层 |阅读模式
如何避免出现这种提示,并且实现同样的功能?
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_MEETNOTICERETURN.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_MEETDATAMANAGE.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETRESOURCE\FUN_MEETRESOURCERESERVE.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_MEETING.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETSEARCH.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETSEARCH.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETRESOURCE\FUN_MEETRESOURCEMANAGE.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETRESOURCE\FUN_MEETRESOURCEUSED.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_CONFEREESET.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\FUN_MEETSEARCH.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETSEARCH.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETSEARCH.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_MEETTOPIC.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\FUN_MEETSUMMARY.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[警告] 循环引用: "Biz:\SPC_EGOVOA\DIR_MEETMANAGE\DIR_MEETARRANGE\FUN_MEETVIEW.Func"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"-->"Biz:\SPC_EGOVOA\DIR_MEETMANAGE\INFO_MEETINGMANAGE.Info"
[
回复

使用道具 举报

发表于 2004-3-25 21:31:54 | 显示全部楼层
假设有三个程序集(功能、信息等都是程序集) a, b, c, a引用到b,b引用到c,而c又引用到a。
a->b->c->a
那这样就为循环引用。为了避免循环引用,可以把公用的函数或者类抽取到一个公用单元中,

比如,假设a引用b是由于b提供了一个方法 procedure ProcB;
而b引用到c是由于c提供了一个方法 procedure ProcC;
c引用到a是由于a提供了一个方法  procedure ProcA;

那我们可以把a提供的方法ProcA放入到一个新的程序集(比如资源集的窗体)中,假设新的程序集叫d。
那现在的引用就为
a->b->c->d
这样就不会形成环而造成循环引用。

上面是通过增加程序集来解决,还可以通过合并解决,比如上面的例子中,我们可能会把c和a合并,那引用关系就为
a->b

避免的方式是比较灵活的,可以根据实际情况来处理。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-25 23:15:38 | 显示全部楼层
我检查了一下,没有发现对函数的互相引用,函数中用到的只有本单元的控件。是不是说增加,datasetbroker组件也会出现循环引用,比如,功能窗体中有datasetbroke1,信息中有datasetbroker2,而每一个datasetbroker都对关联到同一个数据表。
另外:
a->b->c->d

c和a合并,那引用关系就为
a<->b
而不是
c和a合并,那引用关系就为
a->b
回复 支持 反对

使用道具 举报

发表于 2004-3-26 23:04:24 | 显示全部楼层
DataSetBroker中对数据集的引用不会造成循环引用,这里的引用指的是程序集之间的引用,比如功能引用到信息,信息引用到资源集等。引用可以在“项目管理”的ToolWindow中设置,点右键“配置项目属性”中对引用进行设置。
如果确信没有循环引用,可以打开功能,点“重新编译”,看会不会继续提示。
回复 支持 反对

使用道具 举报

发表于 2008-1-10 18:37:54 | 显示全部楼层
我也遇到这个问题,老是在该功能的窗体代码编译中提示警告,循环引用该功能!解释的很清楚,但是具体我们很简单的应用怎么会涉及到循环引用呢?
回复 支持 反对

使用道具 举报

发表于 2008-1-11 08:53:52 | 显示全部楼层
sgmx 如果是警告可以忽略,这是编译器的BUG,如果是错误,那就要检查了
回复 支持 反对

使用道具 举报

发表于 2008-1-11 09:04:56 | 显示全部楼层
是警告,只是看着别扭!
回复 支持 反对

使用道具 举报

发表于 2008-1-11 09:10:36 | 显示全部楼层
收到,已经作为缺陷提交,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-4 20:17 , Processed in 0.038989 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表