随笔 - 2047  文章 - 71 评论 - 10629 trackbacks - 253

提示1: 点击 标题 可进入首页;   提示2: 从搜索引擎中搜索 万一 可迅速找到这里.
昵称:万一
园龄:4年3个月
荣誉:推荐博客
粉丝:349
关注:34

随笔分类(2499)

随笔档案(2051)

积分与排名

  • 积分 - 4148339
  • 排名 - 4

最新评论


在实践中真的会发现更多问题.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

  IA = Interface
    function GetName: string;
    property Name: string read GetName;
  end;

  TC1 = class(TInterfacedObject, IA)
    function GetName: string; virtual;
  end;

  TC2 = class(TC1)
    function GetName: string; override; //覆盖
  end;

  TC3 = class(TC2)
    function GetName: string; override; //再覆盖
  end;

  TC4 = class(TC3)
    function GetName: string; override; //再覆盖
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TC1 }

function TC1.GetName: string;
begin
  Result := 'C1';
end;

{ TC2 }

function TC2.GetName: string;
begin
  Result := 'C2';
end;

{ TC3 }

function TC3.GetName: string;
begin
  Result := 'C3';
end;

{ TC4 }

function TC4.GetName: string;
begin
  Result := inherited + '0';
end;


{测试}
procedure TForm1.FormCreate(Sender: TObject);
var
  v1,v2,v3,v4: IA;
begin
  v1 := TC1.Create;
  v2 := TC2.Create;
  v3 := TC3.Create;
  v4 := TC4.Create;
  ShowMessageFmt('%s, %s, %s, %s', [v1.Name, v2.Name, v3.Name, v4.Name]); //C1, C2, C3, C30
end;

end.

posted on 2012-01-03 22:09 万一 阅读(572) 评论(2) 编辑 收藏

FeedBack:
#1楼 2012-01-03 23:14 lotsbug      
问题在哪里?我觉得这应该是预计中的结果吧,还是……我没看懂?
 回复 引用 查看   
#2楼[楼主] 2012-01-04 17:48 万一      
@lotsbug
无他, 之前没认识到被覆盖过的方法还是虚方法, 所以差点走了弯路.

 回复 引用 查看