为什么不(继承)类构造函数运行?

时间:2015-12-03 15:15:45

标签: delphi class-constructors

我有以下代码:

program ClassConstructor;

{$apptype console}

type
  TTree<K,V> = class(TObject)
  protected type
    TNode = class(TObject)
    end;
    TNodeType = class of TNode;
  protected
    class var NodeType: TNodeType;
  end;

  TThreadedTree<K,V> = class(TTree<K,V>)
  protected type
    TThreadedNode = class(TTree<K,V>.Tnode)
    end;
  protected
    class constructor Init;
  end;

  TRBThreadedTree<K,V> = class(TThreadedTree<K,V>)
  private
    class constructor Init;
  end;

  class constructor TThreadedTree<K,V>.Init;
  begin
    NodeType:= TThreadedNode;
    WriteLn('Class constructor for the plain threaded tree has run');
  end;

  class constructor TRBThreadedTree<K,V>.Init;
  begin
    NodeType:= TThreadedNode;
    WriteLn('Class constructor for the RedBlack threaded tree has run');
  end;


var
  Test: TThreadedTree<integer, integer>;
  RBTest: TRBThreadedTree<integer, integer>;

begin
  Test:= TThreadedTree<integer, integer>.Create;
  RBTest:= TRBThreadedTree<integer, integer>.Create;
  WriteLn('I see nothing');
  Readln;
end.

我的想法是我有一个带有ParentedThreaded后代的普通树祖先类型,它们具有RB,BST和AVL子类型。
为了尽可能抽象线程/父节点,我希望在类构造函数中初始化NodeType,以便我可以调用。

NewNode:= NodeType.Create(Key, Value, Parent);

而不是弄清楚它是否是一个父节点或线程节点。

问题
为什么从不调用类构造函数?
不是继承的类构造函数,甚至不是类型本身的类构造函数。

我知道我可以在构造函数中进行初始化,但它只是让我觉得类构造函数不能运行。

这是一个错误还是我错过了什么?

BTW我正在使用Delphi 10,但XE7表现出相同的行为。

0 个答案:

没有答案