我有一个包含在delphi单元中的函数库,我们称之为UtilitiesU。其中一些函数只是辅助函数,仅在UtilitiesU中使用。我想将这些功能的范围限制在UtilitiesU。这些是我所知道的方法:
理想情况下,我想用C / C ++方式来做 - 也就是说,在实现部分中将它们声明为静态。这可能吗?还有更好的方法吗?
答案 0 :(得分:10)
你仍然可以声明你的功能:
implementation
procedure ShowMe;forward;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMe;
end;
procedure showMe;
begin
ShowMessage('Hello');
end;
因此,您可以按照所需的顺序将所有功能放在实施后。向前宣布它们,并在任何你想要的地方进一步定义它们。
个人而言,我更喜欢将这些方法声明为类方法。 (让我们称之为“名字空间友好”)。但最终结果几乎是一样的。
答案 1 :(得分:3)
我愿意:
从中移除声明 界面和移动功能之前 它的家属在实施 - 凌乱,反直觉的秩序 功能定义,并非总是如此 如果有例如可能的话相互 依赖
顺便说一下,不像在其他语言中那样在delphi中声明静态类。只有var和方法可以是静态的,而不是整个类。
还有其他三种方式
1 - 您可以创建一个类,在其私有部分(可能是静态方法)上放置所有帮助程序代码,并在UtilitiesU单元中使用它。我不会这样做,我认为你写的1方法是最好的。
2 - 您可以在另一个单元中分配所有帮助程序代码,以免将其称为UtilitiesHelper。
3 - 您可以混合使用1和2,但使用受保护的方法。然后,您可以轻松破解UtilitiesU单元中的帮助程序类。例如:
在UtilitiesHelper单元中
TUtilitiesHelper = class
protected
//all your methods here
end;
在UtilitiesU单元
TUtilitiesHelperHack = class(TUtilitiesHelper)
end;
通过它,您可以访问受保护的方法。但我也不推荐它。
修改强>
正如肯所说,你可以使用:
implementation
procedure ShowMe;forward;
我自己测试了这个并且它有效。 (这对我来说也是新的,谢谢Ken)。