锁定老帖子 主题:D语言动态创建对象-D最新功能
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-27
保存为cre.d,使用dmd cre.d编译. 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,针对抽象进行依赖. 昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-27
不错!
|
|
返回顶楼 | |
发表时间:2007-03-27
Walter 同志,赶快住手吧!RTTI的代价可是不小的,再搞就成 java 了。
0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。 |
|
返回顶楼 | |
发表时间:2007-03-27
哦!
结合上脚本,就极其简单的实现了外置的对象管理功能啊. |
|
返回顶楼 | |
发表时间:2007-03-27
必须在一个module里面亚,否则就AV了。
|
|
返回顶楼 | |
发表时间:2007-03-27
晕~,这是鸡肋吗?
|
|
返回顶楼 | |
发表时间:2007-03-27
没什么用,既造成一堆 static 的东西,功能又太有限
|
|
返回顶楼 | |
发表时间:2007-03-27
里面调用了ClassInfo.find(classname),这个实现效率真低:
/************* * 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; } 玩具 |
|
返回顶楼 | |
发表时间:2007-03-28
qiezi 写道 里面调用了ClassInfo.find(classname),这个实现效率真低:
[玩具 关键要看new操作符是怎么产生对象的.才能够决定吧! |
|
返回顶楼 | |
发表时间:2007-03-28
new后面都比较高效了,查找到了就直接调用ClassInfo.create,里面调用_d_newclass,和直接new效率差不多。查找的过程这么慢,哪天发展出java这么庞大的库,调用这个多慢,不过以后肯定会优化的,说说而已。
|
|
返回顶楼 | |