0

我有以下代码:

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

而不必弄清楚它是父节点还是线程节点。

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

我知道我可以在构造函数中进行这个初始化,但是让我很恼火的是类构造函数没有运行。

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

顺便说一句,我使用的是 Delphi 10,但 XE7 显示了相同的行为。

4

0 回答 0