2
从抽象基类创建子类的最佳方法。从抽象基类创建子类的最佳方法
在我的项目中,我有这样的基类抽象和两个子类。
TbaseClass=class
public
procedure Doit;virtual;abstract;
procedure Calculate;virtual;abstract;
Tchild1class=class(TbaseClass)
..
protected
procedure CalcArea;virtual;
public
procedure Doit;override;
procedure Calculate;override;
Tchild2class=class(Tchild1class)
protected
procedure CalcArea;override;
在我的buttonclick代码中,我以这种方式创建所需的childclass,并且正在工作。
.....
var
T:TBaseClass;
begin
case OP of
1: T:=Tchild1class.Create;
2: T:=TChild2Class.Create;
T.Doit;
T.Calculate;
end;
我的问题是下一个。 我可以在我的基抽象类中创建一个构造函数创建过程,这取决于int参数生成所需的子类? 例如:
constructor TBaseClass.Create(OP:integer);
begin
inherited;
case OP of
1: Tchild1class.Create; ///>>>???
2: TChild2Class.Create; //>>>>???
end;
这是可能的吗?
什么是最好的方法来做到这一点?
Thx为答案,但需要声明TBaseClassClass类型?函数GetDescendantClass不能直接返回TBaseClass ?. –
我已经向你展示了它的声明;你不需要更多的东西来声明它。如果返回类型是'TBaseClass',那么你将有一个工厂函数,并且你需要返回一个*实例*,而当返回类型是'TBaseClassClass'时,你返回一个*类*并在稍后创建实例。 'TBaseClassClass'就是所谓的*元类* - 查看它。 –