代替全局变量的方法 刚从VB转过来,习惯了全局变量,看了一些帖子,定义一个保存全局变量的Unit似乎也不是最好的办法。有人推荐:定义一个类,使用“接口”进行参数传递但是对我来说还是有点抽象,能给我个例子吗怎么在类里面定义代替全局变量的接口,怎么转递。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 声明在一个Unit中有什么不妥?用到的Application、Screen不就是这样的全局变量? 全局变量也是面向过程编程技术的一个很大的缺陷,难跟踪,难调试,也就难维护。 为什么要用对象而不是变量呢?对象可以封装对变量的操作,任何对该变量的操作都必须通过调用对象的方法来完成,我们可以在操作该变量的方法中设置断点来调试,这就解决了前面所提到的 3 个难点(难跟踪、难调试、难维护)。对数据的操作可以通过属性的方法进行封装,一旦以后对象内部的数据结构发生了变化,只要我们提供的属性接口不变,对程序别的部分的影响就能减小到最小。例如 Form 之间通过属性来交换数据。以后因为某个原因你得将原来用数组实现的东西改为用链表实现,只要你的属性接口仍然是数组,那对别的对象就几乎没有影响。 用过VB不意味着用Delphi也一直用函数式编程吧我也想提高点呀 就像楼上的各位说的,全局变量简单易用。具体来说,全局变量有两种,1. 全局的对象实例,就像Application,Screen等2. 全局的变量(简单类型,如GUserName)第一种实际上是单例模式的简单实现,在Delphi里面用的还是比较多的。第二种尽量不要用,一般应该考虑用类封装数据和方法。另外,从目前的形式来看,已经不怎么推荐使用全局变量来实现单例模式了,主要有两方面原因:1. 不支持Smart linking全局变量一般是放在单元initialization里面初始化的,所以只要使用这个单元就会执行初始化过程,积累下来会增大exe的大小,延长启动时间。(Delphi2010以后已经有class constructor/destructor来优化这个过程)2. 不能进行自动化测试这其实是最主要的原因,因为全局变量一直存在于程序的整个生命周期,在TDD日益流行的今天,这种方式显然不能适应新的开发模式了。 报表:如何进行分组统计的报表?等待结帖 如何得到字段名! 紧急求救,关于格式化数据。谢谢 怎么理解对象在内存中的头4个字节 急~!提示Undeclared identifier: 'loPartialKey'这是为什么呀? 关于packed型记录结构的问题,急需解决。 如何用DELPHI做SSL网页的客户端认证?(500分) 怎样屏蔽上网时弹出式广告(还有QQ中的广告) 请问大家一个关于视频压缩编码的问题 Delphi 5 是个大白痴 delphi如何调用dll文件中的exe?? 线程中用到 WebBrowser.OleObject
全局变量也是面向过程编程技术的一个很大的缺陷,难跟踪,难调试,也就难维护。
为什么要用对象而不是变量呢?对象可以封装对变量的操作,任何对该变量的操作都必须通过调用对象的方法来完成,我们可以在操作该变量的方法中设置断点来调试,这就解决了前面所提到的 3 个难点(难跟踪、难调试、难维护)。
对数据的操作可以通过属性的方法进行封装,一旦以后对象内部的数据结构发生了变化,只要我们提供的属性接口不变,对程序别的部分的影响就能减小到最小。例如 Form 之间通过属性来交换数据。以后因为某个原因你得将原来用数组实现的东西改为用链表实现,只要你的属性接口仍然是数组,那对别的对象就几乎没有影响。
我也想提高点呀
2. 全局的变量(简单类型,如GUserName)第一种实际上是单例模式的简单实现,在Delphi里面用的还是比较多的。第二种尽量不要用,一般应该考虑用类封装数据和方法。另外,从目前的形式来看,已经不怎么推荐使用全局变量来实现单例模式了,主要有两方面原因:1. 不支持Smart linking
全局变量一般是放在单元initialization里面初始化的,所以只要使用这个单元就会执行初始化过程,积累下来会增大exe的大小,延长启动时间。(Delphi2010以后已经有class constructor/destructor来优化这个过程)2. 不能进行自动化测试
这其实是最主要的原因,因为全局变量一直存在于程序的整个生命周期,在TDD日益流行的今天,这种方式显然不能适应新的开发模式了。