即将推出的Delphi版本中的功能怎么样呢?
也许它可能是一个编译器开关,将所有** private
** s推广到** strict private
** s。
...或者它可能是新的non-legacy compiler font-end尼克霍奇斯谈论的一个特征。 => private
的行为始终类似于 strict private
。
编辑:我之所以这样,是因为我只是不想在我的strict
修饰符中添加数千个private
。此外,“严格私有”行为是我熟悉的任何面向对象语言的默认行为!
答案 0 :(得分:8)
引用文章:
因此,我们正在努力创建一个“新的Delphi”和一个新的编译器体系结构,以保持现有代码的工作,使用Delphi和C ++ Builder发出64位二进制文件,也许还有一些其他类型的我们在这里的二进制文件。这一切都必须正确完成,这一切都适合你。
我将其解释为,如果codegear将改变私有的行为。然后他们会像过去一样保留旧行为的选择。
为了澄清,在一个班级中有6个不同的访问级别(ok 7但不推荐使用自动化)。
public: Anything that can access the object can access this.
protected: Methods in the class and its subclasses and anything in the same unit can access.
strict protected: Methods in the class and its subclasses can access.
private: Methods in the class and anything in the same unit can access.
strict private: Methods in the class.
published: As public buth with runtime information for the object inspector.
答案 1 :(得分:6)
当前的私有实现对于声明它的单元以外的所有内容都是私有的。因此,如果您不想添加严格语句的原因是您不想修改现有单元,除了破坏在同一单元中访问类的任何现有代码之外,你没有任何好处。只要您的现有单位未被修改,那么严格和非严格私有之间的区别就是学术性的。
如果您对严格行为的推理是使用编译器来帮助您重构利用less 私有行为的代码,然后一次将 strict 添加到一个类是一个很好的增量方法,因此您可以更频繁地进入可编译和可测试的状态。整个销售行为的变更将需要在您知道其中任何违规行为是否有效之前修复所有违规行为。
私有的行为类似于C ++的朋友 - 它允许某些类(或程序代码)访问私有成员。 VCL 和 RTL 大量使用此行为,因此编译器切换或全部更改将破坏所有代码。
Delphi的私有的实现对于所有实际目的都是私有的,因为通常你控制声明类的单元。如果你只是声明每个单元一个,并且从不包括程序代码,那么差异只是学术性的。
答案 2 :(得分:0)
我不太明白这个问题。但为什么你需要这个功能?为什么不直接用Strict Privates替换代码中的Privates,如果这是您想要的?
答案 3 :(得分:0)
我预计你想改变private
含义的原因是你想要更严格的行为,而不必破坏向后兼容性。我想你正在制作一个你希望在Delphi 7和之前使用的库,它没有strict
修饰符。
但如果这不是你的理由,那么我认为你没有多少工作要做。您可以使用简单的脚本轻松地将所有private
代码转换为strict private
。
perl -i.bak -pe 's/(?<!\bstrict )\b(private|protected)\b/strict $1/ig' *.pas
这需要任何尚未严格的private
或protected
并将strict
置于其前面。它就地修改文件。 (注意;它也可以在字符串文字中插入“strict”。)
所以无论如何,我认为我们不会很快看到private
变得严格。这样做可能会破坏旧代码,并且从中获得的实际收益并不大。它让纯粹主义者拥有“更纯粹”的代码,但他们只需使用strict
即可。我认为,如果我们要获得“默认严格”可见性,那么更改的时间是首先引入strict
的时间。但就像今天的情况一样,我们已经有了获得严格可见性说明符的方法,因此不需要进行其他更改。