X++中的多态

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

class SuperClass
{
}

void SuperMethod()
{
    print 
"I am a SuperMethod";
}

子类

class DriveClass extends SuperClass
{
}

void SuperMethod()
{
   print 
"I call the SuperMethod From DriveClass";
}

void DriveMethod()
{
    print 
"I am a Drive Method";
}

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

static void testJob(Args _args)
{
    SuperClass sc;
    DriveClass dc;
    
object o;
    ;
    sc 
= new DriveClass();
    
//转化成子类,这在C#中是不允许的,C#必须用强行转化
    dc = sc;
    dc.DriveMethod();

    
//转化成Object类型,这在C#中是允许的,但不能调用子类的方法
    o = sc;
    o.driveMethod();
    pause;

}

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

原文地址:https://www.cnblogs.com/Farseer1215/p/535649.html