刚从VB转过来,习惯了全局变量,看了一些帖子,定义一个保存全局变量的Unit似乎也不是最好的办法。
有人推荐:定义一个类,使用“接口”进行参数传递
但是对我来说还是有点抽象,能给我个例子吗
怎么在类里面定义代替全局变量的接口,怎么转递。
谢谢!

解决方案 »

  1.   

    声明在一个Unit中有什么不妥?用到的Application、Screen不就是这样的全局变量?
      

  2.   


    全局变量也是面向过程编程技术的一个很大的缺陷,难跟踪,难调试,也就难维护。
      为什么要用对象而不是变量呢?对象可以封装对变量的操作,任何对该变量的操作都必须通过调用对象的方法来完成,我们可以在操作该变量的方法中设置断点来调试,这就解决了前面所提到的 3 个难点(难跟踪、难调试、难维护)。
    对数据的操作可以通过属性的方法进行封装,一旦以后对象内部的数据结构发生了变化,只要我们提供的属性接口不变,对程序别的部分的影响就能减小到最小。例如 Form 之间通过属性来交换数据。以后因为某个原因你得将原来用数组实现的东西改为用链表实现,只要你的属性接口仍然是数组,那对别的对象就几乎没有影响。
      

  3.   

    用过VB不意味着用Delphi也一直用函数式编程吧
    我也想提高点呀
      

  4.   

    就像楼上的各位说的,全局变量简单易用。具体来说,全局变量有两种,1. 全局的对象实例,就像Application,Screen等
    2. 全局的变量(简单类型,如GUserName)第一种实际上是单例模式的简单实现,在Delphi里面用的还是比较多的。第二种尽量不要用,一般应该考虑用类封装数据和方法。另外,从目前的形式来看,已经不怎么推荐使用全局变量来实现单例模式了,主要有两方面原因:1. 不支持Smart linking
    全局变量一般是放在单元initialization里面初始化的,所以只要使用这个单元就会执行初始化过程,积累下来会增大exe的大小,延长启动时间。(Delphi2010以后已经有class constructor/destructor来优化这个过程)2. 不能进行自动化测试
    这其实是最主要的原因,因为全局变量一直存在于程序的整个生命周期,在TDD日益流行的今天,这种方式显然不能适应新的开发模式了。