在接口中定义属性
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
{此接口声明了一个 Name 属性; 因为接口没有字段, read/write 都只能从方法}
IMyInterface = interface
function GetName : string;
procedure SetName(val : string);
property Name : string read GetName write SetName;
end;
{类实现的是接口的读写方法, 属性还是属于接口的; 类可以提供一个储存属性的字段}
TMyClass = class(TInterfacedObject, IMyInterface)
private
FName: string;
public
function GetName: string;
procedure SetName(val: string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
function TMyClass.GetName: string;
begin
Result := FName;
end;
procedure TMyClass.SetName(val: string);
begin
FName := val;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
c: TMyClass;
i: IMyInterface;
begin
c := TMyClass.Create;
i := c;
i.Name := 'ABC';
ShowMessage(i.Name); {ABC}
//没有一个 c.Name 存在, 这个属性只属于接口
end;
end.