接口中的构造函数

时间:2012-10-24 20:38:45

标签: delphi interface coding-style delphi-xe2

我知道 - 我不能,但是。

我希望所有将实现我的接口的类具有相同的所有者(通常在构造函数中定义)。这样做的最佳做法是什么?

我应该使用一些基础抽象类或类似的东西吗?

2 个答案:

答案 0 :(得分:7)

接口定义实现者和使用者之间的契约。

该合同的一部分由编译器强制执行。例如,接口的所有实现都具有特定名称的必需功能,这些功能需要特定的参数。

但是接口的另一部分没有被编译器强制执行。这是接口文档中描述的合同的一部分。您可以决定告诉所有实现者他们必须遵守哪些规则就足够了。许多图书馆采取这种立场。 Windows API就是一个突出的例子。

如果您通过代码执行死机,则界面无法提供帮助。你需要在代码中表达约束的东西,在这种情况下需要实现。这意味着你需要使用一个类。一个(几乎)抽象的基类可以完成它。该类的唯一具体部分将强制执行所有权约束。该类的其余部分将是一系列抽象的虚拟方法。这不是Delphi关键字隐含的界面。但是,它是语义术语的界面。

答案 1 :(得分:3)

当然,您可以选择在共同的祖先中实现该接口,或者至少为实现该接口的类具有共同的祖先。但是,您无法通过界面强制执行此操作。接口没有构造函数,接口不能强制哪个类能够或不能实现它。

我认为最好的选择是通过界面公开Owner属性。这样,您至少可以通过界面获取所有者,并且您将强制实现类以至少实现该属性。 B.t.w,允许接口具有返回对象或具有对象参数的属性和方法。