关于Delphi向上映射兼容性的问题!请高手一定指教!分不够再加!!
delphi关于对象指针赋值或者强制类型转换的时候,经常会涉及到类型是否兼容的问题。
对此,本人比较迷惑。
究竟什么才叫类型兼容??不用向我解释说子类和祖先类之间或者什么之间是兼容的。
这些书上都有!我现在只想知道,在发生上述情况的时候(对象指针赋值或者强制类型转换),编译器要具体要检测什么??怎么检测?什么是合法的,什么是非法的,编译器检测的标准是什么?最好能具体点。
这几天对以下几条语句很是费解:
//ACLASS是已定义的一个类;BCLASS是ACLASS的子类
//BCLASS=CLASS(ACLASS)
var
Ao :ACLASS; //这个时候编译器究竟做了哪些工作(具体的说)?
Bo :BCLASS 不仅仅是分配一个个四字节的指针空间吧?肯定要
附加一些和类ACLASS有关的信息为后面的工作做准备?
或者作为检测的标准??是什么??
···············
AO:=BCLASS.create; //正确!这个时候AO的确指向了一个内存的对象空间;这
个空间的大小和BCLASS的instancesize一样大,但却只能访
ACLASS的成员?为什么?
如果是:
BO:=ACLASS.create; //类型不兼容错误!但兼容标准是什么(编译器怎么认为的)???
再如果
AO:=ACLASS.CREATE;
BO:=B(AO); //正确!但 在执行B()的时候,编译器究竟又做了什么(具体)?
它是怎么解释这句话的??此时B0所指对象空间和AO的一般大?
真心希望高手能把这些底层的实现给我们讲讲?在此非常感谢!!