创建自定义构造函数而不直接调用继承

重力

如果在我的自定义构造函数中不调用直接继承的函数,而是调用“正常”的构造函数,可以吗?

 TContainer = Class(TNGContainer)
  private
    FEncoding: TMyEncoding;
  protected
  public
    constructor Create;   overload;    override;
    constructor Create(Enc: TMyEncoding);  overload;
  end;


constructor TContainer.Create;     { 'normal' constructor }
begin
 inherited Create;
 Clear;
 BufMaxSeqLen       := 8*KB;
 FEncodingOffset    := 33;
 {More stuff to initialize here...}
end;


constructor TContainer.Create(Enc: TMyEncoding);    { New constructor }
begin
 Create;              { Call 'normal' constructor which will call Inherited }
 Encoding:= Enc;
end;

我可以在第二个构造函数中调用继承,但是第一个构造函数具有很多初始化代码。因此,我将不得不在两个构造函数中重复此代码。在一个构造函数中修改初始化代码会很容易,而在另一个构造函数中却忘记这样做。

我逐行运行了代码,并以正确的顺序调用了构造函数。继承的(父)构造函数被正确调用。


彼得B的评论使我问这个“结论”问题:是什么使构造函数成为构造函数?
它是从关键字构造函数开始的事实还是它调用继承的事实(在父对象中调用构造函数)?

幻灭

是的,完全可以接受。实际上,在这种情况下,调用inherited Create新的构造函数会很不好,并使您面临以下风险:子类的重写构造函数在应有的时候不被调用。

假设层次结构:TSubContainer = class(TContainer)= class(TNGContainer):

如您所写(正确),在调用新构造函数时,步骤顺序如下:

  • TContainer.Create(Enc:TMyEncoding);
  • TSubContainer.Create;
  • TContainer.Create; (假设继承了TSubContainer调用)
  • TNGContainer.Create;

如果您改为调用继承的Create,则步骤序列如下:

  • TContainer.Create(Enc:TMyEncoding);
  • TNGContainer.Create;

请注意,任何应在其中完成TSubContainer.Create;TContainer.Create;不会发生的工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建自定义构造函数而无需直接调用继承

来自分类Dev

构造函数继承和自定义构造函数

来自分类Dev

构造函数继承和自定义构造函数

来自分类Dev

从基类继承的构造函数与自定义构造函数混合

来自分类Dev

自定义TextView-setText()在构造函数之前调用

来自分类Dev

自定义视图构造函数未调用

来自分类Dev

如何使用Kotlin创建自定义视图的构造函数

来自分类Dev

在自定义构造函数中的堆上创建指针

来自分类Dev

为构造函数创建自定义“事件”

来自分类Dev

如何通过使用自定义构造函数而不调用析构函数来创建具有初始大小的向量?

来自分类Dev

我可以使用自定义构造函数创建自定义数组吗?

来自分类Dev

添加自定义构造函数而不丢失默认地图构造函数

来自分类Dev

当我创建自定义异常类时,如何使用提供的参数调用基本构造函数?

来自分类Dev

树枝:创建调用函数的自定义标签

来自分类Dev

继承的WPF自定义控件不继承父命令

来自分类Dev

在python中构造类而不直接调用构造函数

来自分类Dev

为什么std :: vector的构造函数调用自定义类的析构函数?

来自分类Dev

无法从扩展DialogFragment的类中创建默认构造函数,并且我已经创建了自己的自定义构造函数

来自分类Dev

定义和调用自定义函数

来自分类Dev

调用构造函数而不创建对象

来自分类Dev

使用UI设计文件并使用自定义构造函数QT创建自定义小部件

来自分类Dev

为什么自定义WinForms控件在绘制时不遵守构造函数中设置的属性?

来自分类Dev

自定义视图构造函数不会在Android 5.0.2上调用

来自分类Dev

在C#自定义异常处理的情况下如何进行构造函数调用?

来自分类Dev

自定义向量类中调用了错误的构造函数

来自分类Dev

自定义视图中的样式在超级构造函数调用中不受影响

来自分类Dev

自定义类型的python列表构造函数-两次调用的长度

来自分类Dev

自定义向量类中调用了错误的构造函数

来自分类Dev

为数组创建构造函数并使用自定义类型填充它

Related 相关文章

  1. 1

    创建自定义构造函数而无需直接调用继承

  2. 2

    构造函数继承和自定义构造函数

  3. 3

    构造函数继承和自定义构造函数

  4. 4

    从基类继承的构造函数与自定义构造函数混合

  5. 5

    自定义TextView-setText()在构造函数之前调用

  6. 6

    自定义视图构造函数未调用

  7. 7

    如何使用Kotlin创建自定义视图的构造函数

  8. 8

    在自定义构造函数中的堆上创建指针

  9. 9

    为构造函数创建自定义“事件”

  10. 10

    如何通过使用自定义构造函数而不调用析构函数来创建具有初始大小的向量?

  11. 11

    我可以使用自定义构造函数创建自定义数组吗?

  12. 12

    添加自定义构造函数而不丢失默认地图构造函数

  13. 13

    当我创建自定义异常类时,如何使用提供的参数调用基本构造函数?

  14. 14

    树枝:创建调用函数的自定义标签

  15. 15

    继承的WPF自定义控件不继承父命令

  16. 16

    在python中构造类而不直接调用构造函数

  17. 17

    为什么std :: vector的构造函数调用自定义类的析构函数?

  18. 18

    无法从扩展DialogFragment的类中创建默认构造函数,并且我已经创建了自己的自定义构造函数

  19. 19

    定义和调用自定义函数

  20. 20

    调用构造函数而不创建对象

  21. 21

    使用UI设计文件并使用自定义构造函数QT创建自定义小部件

  22. 22

    为什么自定义WinForms控件在绘制时不遵守构造函数中设置的属性?

  23. 23

    自定义视图构造函数不会在Android 5.0.2上调用

  24. 24

    在C#自定义异常处理的情况下如何进行构造函数调用?

  25. 25

    自定义向量类中调用了错误的构造函数

  26. 26

    自定义视图中的样式在超级构造函数调用中不受影响

  27. 27

    自定义类型的python列表构造函数-两次调用的长度

  28. 28

    自定义向量类中调用了错误的构造函数

  29. 29

    为数组创建构造函数并使用自定义类型填充它

热门标签

归档