zoukankan      html  css  js  c++  java
  • 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引用的方法,就会出现运行时错误,这个可不是什么好事情.

  • 相关阅读:
    windows 安装 nodejs指定版本
    Xshell通过ssh登录远程服务器(秘钥)
    CentOS7 防火墙操作
    Linux系统MySQL开启远程连接
    PHP 下载图片文件并压缩文件成zip
    thinkphp 中更新数据字段,同时某字段值++操作(报错TP5.1不支持的数据表达式:[exp]的解决办法)
    layui的loading加载中
    Linux下面安装swoole
    windows 下cmd命令删除文件或者文件夹
    PHP 删除某目录下的全部文件
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/535649.html
Copyright © 2011-2022 走看看