D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: D语言动态创建对象-D最新功能

yidabu 2007-4-27 20:09

D语言动态创建对象-D最新功能

D语言动态创建对象-D最新功能知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org        by:        ideage        from:        http://ideage.javaeye.com/blog/65785        关键字:        D最新功能 动态创建 插件 IOC        我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话!        保存为cre.d,使用dmd cre.d编译.        [Copy to clipboard] [ - ]CODE:                                module cre;                                import std.stdio;                                interface IPrinter                {                    void print();                    void init(char[] a);                }                                class foo :IPrinter                {                    void print()                    {                    writefln("foo OK    "~fb);                    }                                    void init(char[] a)                    {                    fb = " Hollo "~a;                    }                                    char[] fb;                }                                class fbb :IPrinter                {                    void print()                    {                    writefln("fbb:OK! "~fb);                    }                                    void init(char[] a)                    {                    fb = "Thank you "~a;                    }                                    char[] fb;                }                                //IOC Factory.                class Factory(T)                {                    static T create(char[] Name)                    {                    T instance =cast(T)Object.factory(Name);                    assert(instance);                    return instance;                    }                }                                int main()                {                    writefln("Factory Test!");                    alias Factory!(IPrinter) PT;                    IPrinter a = PT.create("cre.foo");                    a.init("Walter!");                    a.print();                                    IPrinter b = PT.create("cre.fbb");                    b.init("Walter!");                    b.print();                    return 1;                }                根据这个功能,结合动态链接库,可以提供简单插件的功能了!!!        实现了IOC,针对抽象进行依赖.        昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.        oldrev        2007-03-27 14:26        Walter 同志,赶快住手吧!RTTI的代价可是不小的,再搞就成 java 了。        0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。        h_rain        2007-03-27 14:51        哦!        结合上脚本,就极其简单的实现了外置的对象管理功能啊.( 本文出处: http://www.d-programming-language-china.org )        qiezi        2007-03-27 15:04        必须在一个module里面亚,否则就AV了。( 本文出处: http://www.d-programming-language-china.org )        oldrev        2007-03-27 19:51        没什么用,既造成一堆 static 的东西,功能又太有限        qiezi        2007-03-27 20:03        里面调用了ClassInfo.find(classname),这个实现效率真低:        代码        [Copy to clipboard] [ - ]CODE:                                    /*************                    * Search all modules for ClassInfo corresponding to classname.                    * Returns: null if not found                    */                    static ClassInfo find(char[] classname)                    {                foreach (m; ModuleInfo.modules())                {                    //writefln("module %s, %d", m.name, m.localClasses.length);                    foreach (c; m.localClasses)                    {                    //writefln("\tclass %s", c.name);                    if (c.name == classname)                        return c;                    }                }                return null;                    }                qiezi 写道        里面调用了ClassInfo.find(classname),这个实现效率真低:        [玩具( 本文出处: http://www.d-programming-language-china.org )        关键要看new操作符是怎么产生对象的.才能够决定吧!        qiezi        2007-03-28 12:14        new后面都比较高效了,查找到了就直接调用ClassInfo.create,里面调用_d_newclass,和直接new效率差不多。查找的过程这么慢,哪天发展出java这么庞大的库,调用这个多慢,不过以后肯定会优化的,说说而已。        ideage        2007-03-28 15:15        应该不会太慢.都是查找,然后创建.如果有多个DLL,我想可能会慢点.( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言动态创建对象-D最新功能