多态在语言的表现上就是用父类类型调用子类方法的实现,C++和C#是通过虚函数表来实现的,在具体实例化的时候把重载的函数地址写到虚函数表的地址列表中,我想X++应该也是这样实现的.
问题在于如果想访问子类特有的函数,该怎么玩,C#中必须用强制转化,将父类类型强制转化成子类类型,才能调用,强行转化的语法跟C语言一样,(子类型)父类型.在X++中没看到这种语法,不过可以直接赋值子类型=父类型,还可以直接赋值给object类型, object = 父类型,然后调用子类的方法.看代码吧
父类:







子类











X++中调用子类特有的方法.

















这也许是X++对类型不太敏感造成的.通过Object类型调用子类的方法在某种情况下是一种不错的注意,比如用类工厂创建的类,有时候并不知道其真正的子类类型,想得到其真正的类型需要重新执行类工厂的那一段判断逻辑,直接用object调用倒是简单一些,不过这样编译器不会执行编译时检查,如果真正被实例化的类,不包含object引用的方法,就会出现运行时错误,这个可不是什么好事情.