0

以下看起来语法正确并且编译良好。

unit MyAPI;

interface
// function Min(X, Y: Integer): Integer;
// function Max(X, Y: Integer): Integer;

implementation

function Min(X, Y: Integer): Integer;
begin
  if X < Y then Min := X else Min := Y;
end;

function Max(X, Y: Integer): Integer;
begin
  if X > Y then Max := X else Max := Y;
end;

end.

我想为另外 50 个函数做同样的事情,通常是我正在构建的动态库的外观函数。这 50 个函数的主体都很小,只需调用内部代码,然后通过输出 DLL 将数据转换为 C 风格调用。

出于这个原因,我想让编写界面部分变得经济。

unit MyAPI;

interface
uses Optimizer;

implementation

function Min(X, Y: Integer): Integer;
var
  optimizer: TOptimizer;
begin
  optimizer := TOptimizer.Create;
  Min := optimizer.Min(X,Y);
end; stdcall;

...

end.

这是好的,还是不好的做法?我还有什么其他选择?

4

2 回答 2

3

interface和部分的含义implementation是截然不同的。简而言之 - 实现是实际的代码,它需要让它运行所需的任何东西。显然,未实现的代码将不起作用:)

interface部分是单元中其他单元可以看到和使用的部分。如果您的整个程序是一个单元,那么绝对不需要interface定义。

如果您需要使用单元外部的代码,正如您所暗示的(动态库的外观函数),您应该在interface部件中列出这些函数。

如果您了解面向对象的概念,这类似于私有/公共定义。中声明的任何内容interface都是公开的,而其他所有内容都是私有的。interface/implementation分隔或多或少是穷人的封装。

于 2013-10-01T14:29:45.400 回答
3

除了第二个示例中明显的内存泄漏(没有破坏变量optimizer)之外,主要基于您的要求,在接口部分中声明函数之间存在差异。

未在接口部分声明的函数只能在同一单元内使用,并且不能从使用该单元的其他单元调用。

在接口部分声明的函数可以在单元外使用。

这不是节省线路的问题,两个选项在语义上是不同的,并且决定是否将功能隐藏到外部世界。

于 2013-10-01T14:19:05.347 回答