没有接口的功能

时间:2013-10-01 09:36:14

标签: delphi interface

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

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.

这是好的还是不好的做法?我还有其他选择吗?

2 个答案:

答案 0 :(得分:3)

除了第二个例子中明显的内存泄漏(没有破坏变量optimizer),主要基于你的要求,在接口部分声明函数之间是否有区别。

未在接口部分声明的功能只能在同一单元中使用,不能使用该单元从其他单元调用。

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

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

答案 1 :(得分:3)

interfaceimplementation部分的含义非常明显。简而言之 - 实现是实际的代码,它需要使其运行所需的一切。显然,未实现的代码不起作用:)

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

如果您需要使用设备外部的代码,正如您所暗示的那样(动态库的façade函数),您应该在interface部分列出这些函数。

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