当前位置:  开发笔记 > 编程语言 > 正文

检查班级名称

如何解决《检查班级名称》经验,为你挑选了2个好方法。

我不知道OWNER对象类名.所以我必须检查我的代码中的所有地方:

if TObject(OWNER) is TFirstClass then begin
  TFirstClass(OWNER).FirstFunction;
  TFirstClass(OWNER).SecondFunction;
  ...
end else
if TObject(OWNER) is TSecondClass then begin
  TSecondClass(OWNER).FirstFunction;
  TSecondClass(OWNER).SecondFunction;
  ...
end;

有没有更好的办法?因为如果在代码的许多地方有条件,我必须这样做.TFirstClass和TSecondClass(我必须运行)的所有功能都是相同的.

注意:我使用的是Delphi 5.



1> mghie..:

如果您无法访问TFirstClass和TSecondClass,但仍希望简化代码,可以采用以下方法:

创建适配器基类:

type
  TMyAdapter = class(TObject)
  public
    procedure FirstMethod; virtual; abstract;
    procedure SecondMethod; virtual; abstract;
  end;

然后创建后代类TFirstClassAdapter和TSecondClassAdapter,并分别为它们提供对TFirstClass或TSecondClass实例的私有引用.添加一个设置此引用的构造函数.覆盖适配器类的方法,以便它们调用适应的类.

type
  TFirstClassAdapter = class(TMyAdapter)
  private
    fObject: TFirstClass;
  public
    constructor Create(AAdaptedObject: TFirstClass);

    procedure FirstMethod; override;
    procedure SecondMethod; override;
  end;

constructor TFirstClassAdapter.Create(AAdaptedObject: TFirstClass);
begin
  inherited Create;
  fObject := AAdaptedObject;
end;

procedure TFirstClassAdapter.FirstMethod;
begin
  fObject.FirstMethod;
end;

procedure TFirstClassAdapter.SecondMethod;
begin
  fObject.SecondMethod;
end;

对于其他班级也是如此.现在你只需要决定是否创建一次适配器并传递它,或者你是否创建了一个你需要它的地方调用的函数,它将为你的具体类提供适配器.

如果使用接口实现适配器,那么您甚至不需要自己管理适配器的生命周期.

通过这种方式,您可以获得Ulrich在其答案中提供的多态行为,但无需更改TFirstClass和TSecondClass.



2> Uli Gerhardt..:

从公共基类派生TFirstClass和TSecondClass,该基类声明虚方法FirstFunction和SecondFunction.

乌利.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有