在接口中定义属性

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.

posted @ 2010-06-29 09:38  泡面 @ 幸福  阅读(1153)  评论(0编辑  收藏  举报