【问题标题】:Interfaces and property visibility接口和属性可见性
【发布时间】:2013-02-04 10:36:18
【问题描述】:

我有一个简单的界面

  ISomeProperties = interface
  ['{3AD52E4E-5190-4ABE-8AFC-062295E3A352}']
    function GetPort: integer;
    procedure SetPort(const Port: integer);
  end;

GetFunction 和 SetFunction 在代码完成中可见。但是在我添加这样的属性之后

  ISomeProperties = interface
  ['{3AD52E4E-5190-4ABE-8AFC-062295E3A352}']
    function GetPort: integer;
    procedure SetPort(const Port: integer);
    property Port: integer read GetPort write SetPort;
  end;

GetPort 和 SetPort 方法消失,只有属性 Port 可见 - 很棒。

现在我实现了一个接口

  TSomeProperties = class(TInterfacedObject, ISomeProperties)
  private
    function GetPort: integer;
    procedure SetPort(const Port: integer);
  end;

但是属性 Port 在实现接口的类中是不可见的!这是理想的行为还是我做错了什么?

【问题讨论】:

  • 声明属性不会使方法不可见。
  • @DavidHeffernan 是的,对不起,我的错误。在代码完成中不可见。是这样还是我的 Delphi 愚弄了我?

标签: delphi oop interface delphi-7


【解决方案1】:

类不是接口。接口上的属性只是语法糖,暴露了 Delphi 的 GetPort 和 SetPort 方法。

这个属性并不是真正必须或可以实现的东西(只有访问器方法),所以它在实现类中是不可见的,除非你也在那里定义了一个属性。唯一可以实现的就是方法。

FWIW,当您定义属性时,这些方法不会“消失”。你仍然可以打电话给他们。接口的所有成员都具有相同的可见性。

【讨论】:

  • 所以基本上我应该将我的属性定义移动到实现接口的类中并忘记接口中的属性?
  • 如果您需要界面上的属性,您可以在那里定义它。如果你在课堂上需要它,你可以在那里定义它。根据您的需要,您最终可能会定义它两次。我很少费心在接口上定义属性,但这是个人喜好。在使用接口时,我宁愿使用方法。
猜你喜欢
  • 2020-02-07
  • 2014-07-11
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2015-12-07
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多