接口中的属性

由于接口中的变量声明是不可能的,因此不能使用定义属性(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;

但需要注意的是,这种方式只能通过接口实例访问属性,而不能通过类本身访问。此外,将属性添加到类中会增加可读性。