Delphi本地功能

时间:2011-04-13 00:36:46

标签: delphi function scope

我有一个包含在delphi单元中的函数库,我们称之为UtilitiesU。其中一些函数只是辅助函数,仅在UtilitiesU中使用。我想将这些功能的范围限制在UtilitiesU。这些是我所知道的方法:

  1. 从接口中删除声明并在实现中将其移动到其依赖项之前 - 函数定义的凌乱,反直觉的顺序,如果存在例如,则不可能。相互依赖
  2. 将所有函数放入静态类(ala Java)并根据需要将它们公开或私有 - 太多样板,错综复杂
  3. 声明使用它们的函数本地的辅助函数 - 与第1点相同的问题
  4. 理想情况下,我想用C / C ++方式来做 - 也就是说,在实现部分中将它们声明为静态。这可能吗?还有更好的方法吗?

2 个答案:

答案 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)。