Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 接口中的构造函数_Delphi_Interface_Coding Style_Delphi Xe2 - Fatal编程技术网

Delphi 接口中的构造函数

Delphi 接口中的构造函数,delphi,interface,coding-style,delphi-xe2,Delphi,Interface,Coding Style,Delphi Xe2,我知道——我不能,但是 我希望实现我的接口的所有类都具有通常在构造函数中定义的相同所有者。这样做的最佳实践是什么 我应该使用一些基本抽象类或类似的东西吗?当然,您可以选择在一个公共祖先中实现接口,或者至少为实现接口的类提供一个公共祖先。但是,您不能通过接口强制执行此操作。接口没有构造函数,并且接口无法强制哪个类可以或不能实现它 我认为最好的选择是通过接口公开所有者属性。这样,您至少可以通过接口获得所有者,并且您将强制实现类以至少实现该属性。B.t.w,允许接口具有返回对象或具有对象参数的属性和方

我知道——我不能,但是

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


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

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


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

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


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

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

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

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


如果您死心塌地地想通过代码强制执行,那么接口就帮不上忙了。您需要一些在代码中表达约束的东西,在这种情况下,这将需要实现。这意味着您需要使用一个类。一个几乎抽象的基类可以完成它。类的唯一具体部分将强制执行所有权约束。类的其余部分将是一系列抽象的虚拟方法。这不是Delphi关键字所暗示的界面。然而,从语义上讲,它是一个接口。

接口定义了实现者和消费者之间的契约

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

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


如果您死心塌地地想通过代码强制执行,那么接口就帮不上忙了。您需要一些在代码中表达约束的东西,在这种情况下,这将需要实现。这意味着您需要使用一个类。一个几乎抽象的基类可以完成它。类的唯一具体部分将强制执行所有权约束。类的其余部分将是一系列抽象的虚拟方法。这不是Delphi关键字所暗示的界面。然而,从语义上讲,它是一个接口。

一旦有了抽象基类,就没有必要再拥有接口了。在这一点上,您实际上拥有的是一个接口。你很难理解拥有同一个主人是什么意思。对我来说,这听起来好像是让实现渗透到接口中。@DavidHeffernan拥有接口有很多理由,即使你有一个抽象的基类。@Golez喜欢什么?抽象类在语义上与接口相同。@GolezTrol-编写错误代码的原因很多:我想您缺少的是Delphi接口与Delphi类是正交的。您的接口可以由具有任何祖先和任何构造函数的类实现。这就是接口的设计目的。一旦你有了一个抽象的基类,那么拥有一个接口就没有任何意义了。在这一点上,您实际上拥有的是一个接口。你很难理解拥有同一个主人是什么意思。在我看来,你们似乎是在让实现渗透到接口中。@DavidHeffernan有很多
有接口的理由,即使你有一个抽象的基类。@Golez喜欢什么?抽象类在语义上与接口相同。@GolezTrol-编写错误代码的原因很多:我想您缺少的是Delphi接口与Delphi类是正交的。您的接口可以由具有任何祖先和任何构造函数的类实现。这就是界面设计的目的。谢谢,我读了更多,重新思考了我的界面设计。令我惊讶的是,我获得了更一致的体系结构。谢谢,我读了更多的书,并重新思考了我的界面设计。令我惊讶的是,我实现了更一致的架构oO