内容中再问一句,一个类中的数据必须只能存在一份,通常的做法是把这个类作成单例模式还是把这个类中的数据字段处理为静态的啊?哪一种更好的。
反正在Delphi中实现单例非常古怪,必须使用单元全局变量。后一种方法更是没辙,还是只能使用单元全局变量来模拟。

解决方案 »

  1.   

    你的标题实在恶心回去好好翻翻语法书,看看Delphi里是怎么支持类类型、类方法的再好好看看这篇Creating a real singleton class in Delphi 5
    搞清楚singleton怎么实现
    http://dn.codegear.com/article/22576另外建议去网上搜搜,静态方法到底是破坏OO还是符合OO?为什么Java里要把static改称类方法?
      

  2.   

    楼上的,对象模型中没有类字段难道你认为还是合理的了?我实在难以理解你这种偏执的袒护VCL的人,Delphi 2007对语法已经作了修改,支持类字段,难道这是退步?但是我不用Delphi 2007而已。
    在Delphi中创建单例模式,只能使用全局变量来模拟,我本人就是认为这种做法很恶心。我自己才是个语言优美性的维护者,我喜欢Object Pascal语言不比你差。但是还是得承认这是Delphi的对象模型的一大缺憾。关于语法书的问题,我可以不客气的问你一句,请问你有没有看过《Delphi技术手册》,没有看过这本书你少来跟我谈懂Delphi Pascal语言。这本书绝版,我一个字一个字的敲下来的打印收藏,600页。你和我较真语法?简直可笑。
      

  3.   

    OP的单元本身就相当于静态类。
    你觉得不爽的话写成 unitname.variable、unitname.function 这种形式满意吗?:)
      

  4.   

    大头鸟推荐的那篇文章我刚看完,有意义吗?使用了两个单元级别的全局变量,还不是一个道理,加了一个计数器而已。还不就是复写NewInstance和FreeInstance的,这个在《Delphi深度搜索》中也说明过,不排除后者是学习前者的可能。我只是说这个方法并无神奇之处。你不用全局变量给我在Delphi里面搞出个单例来我算你牛B。说了这么多,是爱之深,责之切!我现在写个程序需要单例,但是看着那个单元全局变量,我怎么都不舒服。为什么当初设计对象模型的时候不加上的呢。Class function都支持了,为啥不支持class字段呢?
      

  5.   

    其实C++的静态字段在类中说明只是个表象,还是得在类的外部重新说明以分配内存;Delphi将单元变量隐藏在实现部分,通过类方法或者属性返回和C++是一个道理,就缺个类中字段说明的表象,这没有多少实际意义。
      

  6.   

    早期的Delphi不提供类字段,恰恰说明它的优美。对象必须先从类实例化,是OO的基本要求
    类可以看作是类类型的实例,既然是实例就得构造才能使用,
    如果按照严格的OO想法,我们得先用类类型构造类,再用类构造对象
    类类型又可以看作类类类型的实例如此循环往复,才能算得上纯粹的OO
    为了避免陷入这种鸡生蛋、蛋生鸡的逻辑,
    各种语言在实现OO时,采用了一个不怎么OO的办法,就是类方法,可以没有实例就能使用
    这个方法是否优美得看各自的感觉,但肯定不是严格的OO
    作为Delphi来说,采用类方法是必须的,即便类方法不怎么OO,否则我们没办法解释构造函数
    而对于类字段,由于Delphi已经有全局变量,再增加一个同样不怎么OO的类字段就显得没有必要
    从这一点来说,Delphi的对象模型更贴近OO思想至于说C++里有静态方法和静态变量,是为了表达“可以在类里定义不属于任何类的方法”,这离OO更远了
    Java里有类变量,那是因为Java没有向C++那种全局变量,才提出一个类变量的说法,
    类变量在Java世界里是“合理”的,但是在Delphi里却不是必需的至于说到Delphi 2007支持类变量,我没相关的资料,不敢确定,
    即使增加了,也只能说明Delphi的态度更加趋于务实,
    毕竟很多类似这种singleton的问题用类变量实现会更方便一些
      

  7.   

    早几年有人拿泛型、反射跑到Delphi里来说事,
    建议你也学学人家,找个让人反驳不了的理由
      

  8.   

    [大头鸟]系大牛!向您学习!楼主喜欢思考"筷子吃饭好还是刀叉吃饭还"这类问题,偶也粉支持!O YEAH!  .(n_n).