不同类,但是相同结构,怎么简化代码?(100分)

  • 主题发起人 主题发起人 shaga
  • 开始时间 开始时间
S

shaga

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的test过程该怎么写,才可以兼容b和c的调用?

TA = class
public
t1: string;
end;

TB = class(TA)
public
t2: string;
end;

TC = class(TA)
public
t2: string;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
Test(b);
Test(c);

end;

procedure TForm1.Test(a: TA);
begin
with a as TB do // 这里,由于with后面将进行大量的代码处理,不想copy一份给c来用
begin
ShowMessage(t2);
end;
end;
 
你可以增个开关变量,
来执行不同的代码呀
 
把TB、TC中共同的部分移到TA中
 
同意楼上的。不过你的with a as TB do 这句,还是需要给TC copy一份的。
最多就是把TB,TC公共的部分放在TA里,用 with a as TA do判断,
至于分属TB,TC的部分,还是需要单独判断。
with a as TA do //公共代码
begin
end;
with a as TB do
begin
end;

with a as TC do
begin
end;
 
有没办法不把相同的东西放到TA,而用一个方法来做?
 
可以使用接口解决
 
TA = class
public
t1: string;
t2: string
virtual
abstract;
end;

TB = class(TA)
public
t2: string
override;
end;

TC = class(TA)
public
t2: string
override;
end;

procedure TForm1.Test(a: TA);
begin
ShowMessage(a.t2);
end;

这样TB,TC直接使用,不用区分 with as。
最基本的面向对象,抽象和多态概念,稍微看一下书就会。
 
后退
顶部