4

私はシンプルなインターフェースを持っています

  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 メソッドが消え、適切なポートのみが表示されます - 素晴らしいです。

今私はインターフェースを実装します

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

しかし、ポートプロパティは、インターフェイスを実装するクラスからは見えません! それは望ましい動作ですか、それとも何か間違っていますか?

4

1 に答える 1

4

クラスはインターフェースではありません。インターフェイスのプロパティは、Delphi のメソッド GetPort および SetPort を公開する、単なる構文糖衣です。

このプロパティは実際には実装する必要がある、または実装できるもの (アクセサ メソッドのみ) ではないため、実装クラスでもプロパティを定義しない限り、実装クラスでは表示されません。実装できるのはメソッドだけです。

FWIW、プロパティを定義してもメソッドは「消えません」。あなたはまだそれらを呼び出すことができます。インターフェイスのすべてのメンバーの可視性は同じです。

于 2013-02-19T16:57:22.670 に答える