我有以下代码:
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.
我的想法是我有一个带有Parented
和Threaded
后代的普通树祖先类型,它们具有RB,BST和AVL子类型。
为了尽可能抽象线程/父节点,我希望在类构造函数中初始化NodeType
,以便我可以调用。
NewNode:= NodeType.Create(Key, Value, Parent);
而不是弄清楚它是否是一个父节点或线程节点。
问题
为什么从不调用类构造函数?
不是继承的类构造函数,甚至不是类型本身的类构造函数。
我知道我可以在构造函数中进行初始化,但它只是让我觉得类构造函数不能运行。
这是一个错误还是我错过了什么?
BTW我正在使用Delphi 10,但XE7表现出相同的行为。