介面中的屬性

由於介面中的變數宣告是不可能的,因此不能使用定義屬性(property Value: TObject read FValue write FValue;)的快速方式。相反,必須在介面中宣告 Getter 和 setter(僅在需要時)。

IInterface = interface(IInterface)
    ['{6C47FF48-3943-4B53-8D5D-537F4A0DEC0D}']
    procedure SetValue(const aValue: TObject);
    function  GetValue(): TObject;

    property Value: TObject read GetValue write SetValue;
end;

值得注意的是,實現類不必宣告屬性。編譯器將接受此程式碼:

TImplementer = class(TInterfacedObject, IInterface)
    procedure SetValue(const aValue: TObject);
    function  GetValue(): TObject
end;

但需要注意的是,這種方式只能通過介面例項訪問屬性,而不能通過類本身訪問。此外,將屬性新增到類中會增加可讀性。