2013-02-19 74 views
4

我有一個簡單的界面接口和屬性顯示

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

GetFunction和SetFunction是在代碼complection可見。但在我添加這樣的屬性後

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方法只消失propert端口可見 - 很好。

現在我實現一個接口

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

但物業端口不是從實現接口的類可見!這是一種理想的行爲,或者我做錯了什麼?

+2

聲明屬性不會使方法不可見。 – 2013-02-19 17:22:11

+0

@DavidHeffernan對不起,我的錯。代碼補全中不可見。這是正確的還是我的德爾福愚弄我? – JustMe 2013-02-19 18:28:42

回答

4

類是不是接口。接口上的屬性僅僅是語法糖,暴露了Delphi的GetPort和SetPort方法。

此屬性是不是真的東西,必須或可以實現(僅存取方法),所以它是不可見的實現類,除非你定義一個屬性也有。唯一可以實現的是方法。

FWIW,該方法不會「消失」當你定義的屬性。你仍然可以打電話給他們。界面的所有成員具有相同的可見性。

+0

所以基本上我應該把我的屬性定義移動到實現接口並忘記接口中的屬性的類中? – JustMe 2013-02-19 17:00:38

+1

如果您需要界面上的屬性,您可以在此處定義它。如果你在課堂上需要它,你可以在那裏定義它。根據您的需求,您最終可能會定義兩次。我很少費心去定義界面上的屬性,但這是個人偏好。在使用接口時,我寧願使用這些方法。 – 2013-02-19 17:02:31