2016-02-12 67 views
3

我想在父子对象的树中有一个继承链。Delphi - 对象树中的继承链

比方说,我有一个obj类型A,它有一个A的数组,但也是一个数组B. B是具有C的数组的另一个对象。 C从一个继承,但略作修改A. 的版本,所以我必须:

type 
A= class 
    fArrayOfA : Array of A; 
    fArrayOfB : Array of B; 
end; 

C= class(A) 
//body 
end; 

B= class 
    fArrayOfC : Array of C; 
end; 

似乎对象的顺序是非常重要的,而Delphi编译器从上往下读。所以“B阵列”在A中给出了一个未声明的标识符,除非我把A的类型放在A以上。但是,我得到了B中的“C的数组”的错误,因为它不知道C是什么。

任何想法,如果有任何标识符丢失,将解决这个问题?我尝试将A分解为unit1,将B & C分解为unit2,现在我有“循环参考”!

回答

3

你可以做所谓的“前锋类”定义;

TB = class; // Forward Class 

TA = class(TSomething) 
    ..... 
end; 

TB = class(TSomething) 
    ..... 
end; 

它基本上允许TA了解TB之前它完全声明。在Delphi帮助下阅读Classes and Objects (Delphi)

+0

不知道我能做到这一点。非常感谢! – Alexander

+2

重要的是要注意,声明需要在同一个“类型”部分。 –