从抽象基类创建子类的最佳方法

赋予生命

从抽象基类创建子类的最佳方法。

在我的项目中,我以这种方式有一个基类摘要和两个子类。

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代码中,我以这种方式创建了所需的子类,并且可以正常工作。

.....
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;

这可能吗?

做到这一点的最佳方法是什么?

罗伯·肯尼迪

不,那是不可能的。构造函数开始运行后,将固定要创建的对象的类。一个对象即使在构造过程中也不能更改其类。

您可以编写一个带有整数参数并选择要实例化的后代类工厂函数这很像您建议的无效构造函数,就像一个独立的函数或类方法而不是构造函数一样。

您还可以编写一个仅返回该类的函数,然后可以将其实例化,如下所示:

type
  TBaseClassClass = class of TBaseClass;

function GetDescendantClass(op: Integer): TBaseClassClass;
begun
  case op of
    1: Result := TChild1Class;
    2: Result := TChild2Class;
    else Assert(False);
  end;
end;

var
  DescendantClass: TBaseClassClass;

DescendantClass := GetDescendantClass (op);
T := DescendantClass.Create;
T.DoIt;

使用该技术,有时使构造函数为虚拟的很有用,但这不是必需的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从抽象类调用GetMethod以获得子类的方法?

来自分类Dev

如何使用抽象超类中子类的方法

来自分类Dev

创建一个基类与子类的静态类型的对象?

来自分类Dev

Java继承;将子类传递给超类的抽象方法

来自分类Dev

在python中创建无法初始化但其子类可初始化的类的最佳方法

来自分类Dev

将多个类转换为子类的最佳方法

来自分类Dev

在SQLAlchemy基类中定义抽象方法

来自分类Dev

子类可以创建抽象的超类类型的对象吗?

来自分类Dev

抽象类及其子类

来自分类Dev

python抽象基类,mixin和抽象方法之间的区别

来自分类Dev

从基类C#调用子类方法

来自分类Dev

从抽象基类返回子类的对象

来自分类Dev

无法编译实现基类抽象方法的子类

来自分类Dev

Pylint无法处理抽象基类的抽象子类

来自分类Dev

在Python中实现抽象类的最佳方法

来自分类Dev

创建抽象基类列表以填充继承的对象

来自分类Dev

与抽象基类中的抽象类成员一起工作的最佳方法?

来自分类Dev

Java子类无法实现父类的抽象方法

来自分类Dev

为什么基类调用子类的方法?

来自分类Dev

创建带有子类列表的基类列表

来自分类Dev

从子类嵌套类访问基类方法

来自分类Dev

子类调用基类构造函数,然后在子类Arduino C ++中使用基类的实例方法

来自分类Dev

抽象类及其子类

来自分类Dev

从抽象类测试子类的抽象方法

来自分类Dev

从抽象类引用子类

来自分类Dev

从子类调用基类的扩展方法

来自分类Dev

从指针基抽象类调用非虚拟子类方法

来自分类Dev

如何在基类中创建子类对象

来自分类Dev

在从抽象基类继承的类中添加方法?

Related 相关文章

热门标签

归档