`
ideage
  • 浏览: 326143 次
社区版块
存档分类
最新评论

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

阅读更多
我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话!

保存为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,针对抽象进行依赖.

昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.
分享到:
评论
11 楼 achun 2007-03-30  
有比没有强,用不用看您的选择了,
只要不影响整体就行
10 楼 ideage 2007-03-28  
应该不会太慢.都是查找,然后创建.如果有多个DLL,我想可能会慢点.
9 楼 qiezi 2007-03-28  
new后面都比较高效了,查找到了就直接调用ClassInfo.create,里面调用_d_newclass,和直接new效率差不多。查找的过程这么慢,哪天发展出java这么庞大的库,调用这个多慢,不过以后肯定会优化的,说说而已。
8 楼 ideage 2007-03-28  
qiezi 写道
里面调用了ClassInfo.find(classname),这个实现效率真低:
[玩具


关键要看new操作符是怎么产生对象的.才能够决定吧!
7 楼 qiezi 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;
    }

玩具
6 楼 oldrev 2007-03-27  
没什么用,既造成一堆 static 的东西,功能又太有限
5 楼 h_rain 2007-03-27  
晕~,这是鸡肋吗?
4 楼 qiezi 2007-03-27  
必须在一个module里面亚,否则就AV了。
3 楼 h_rain 2007-03-27  
哦!
结合上脚本,就极其简单的实现了外置的对象管理功能啊.
2 楼 oldrev 2007-03-27  
Walter 同志,赶快住手吧!RTTI的代价可是不小的,再搞就成 java 了。
0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。
1 楼 soulmachine 2007-03-27  
不错!

相关推荐

    D 语言详细教程

    - 动态内存:尽管有垃圾回收,但D语言也支持动态内存分配和释放,如malloc和free。 8. 元编程 - 运行时类型信息(RTTI):D语言支持运行时类型检查和类型信息访问。 - Mixins:元编程特性允许在编译时生成代码,...

    D语言教程

    第三章聚焦于D语言中的面向对象编程特性,这对于理解和实现复杂的应用程序至关重要。 1. **类与接口**: - 介绍了类的定义及其成员方法、属性。 - 探讨了接口的概念,以及如何实现多个接口。 2. **继承与多态**...

    D语言白皮书及语法(中文)

    D语言是作为一种高效、灵活且功能强大的系统级编程语言设计的,它结合了C++的性能与现代编程语言的便利性。在本文件中,我们将深入探讨D语言的基础知识、核心特性以及与Java和C#的对比。 首先,D语言的语法结构与...

    D语言程序设计(用D语言编程)

    D语言通过减少冗余代码、提供强大的模板支持以及内置的单元测试功能等方式提高了程序员的工作效率。 ##### 3. 函数 D语言中的函数可以具有默认参数、可变参数列表以及返回多个值的能力。此外,D语言还支持内联函数...

    D程序设计语言

    - D语言结合了C/C++的强大功能和现代编程语言的高级特性。 - 改进了C/C++中的许多问题,如内存管理、安全性等。 - 具有良好的性能和可移植性。 - **主要目标**: - 提供一种更安全、更可靠、更高效的编程方式。...

    D语言编译器.zip

    D语言是一种现代的、面向对象的、通用的编程语言,由沃德·坎宁安(Walter Bright)设计,旨在提供C和C++的效率,同时增加一些高级特性,如垃圾回收和类型安全。这个“D语言编译器.zip”压缩包显然包含了用于编译D...

    关于D语言

    5. 动态数组和字符串:D语言内建了动态数组和字符串类型,避免了C++中常见的边界检查问题。 6. 多线程支持:D语言内置了对多线程编程的支持,简化并发编程。 7. 标准库:D语言的标准库提供了丰富的功能,包括容器、...

    D语言中文手册

    6. **模板元编程**:D语言的模板功能非常强大,不仅可以用于类型,还可以用于表达式和函数,甚至可以进行元编程,生成代码。 7. **标准库**:D语言的标准库(Phobos)提供了大量实用的模块,涵盖输入/输出、字符串...

    D语言编写《汉诺塔》

    在D语言中编写GUI程序,通常可以利用第三方库,如Derelict(用于加载动态链接库)或Vibe.d(一个用于构建异步Web应用和GUI应用的库)。 在这个项目中,我们看到的文件包括: 1. `main.d`:这是项目的主源代码文件...

    d语言:dmc8.50

    3. 动态特性:D语言同时拥有动态语言的一些特性,如动态类型(通过`void*`和`cast`关键字)、运行时类型信息(RTTI)以及元编程,让开发更具灵活性。 4. 内存管理:D语言内置垃圾回收机制,同时也允许手动内存管理...

    D-Bus Tutorial

    通过自省,客户端可以动态发现远程对象的结构,从而更灵活地使用D-Bus。 #### 六、使用GLib API访问远程对象 1. **D-Bus-GLib类型映射**:在使用GLib API时,D-Bus数据类型与GLib数据类型之间的映射规则。 2. **...

    D语言的中文文档

    - **模板**:D语言的模板支持函数模板、类模板和模板元编程,可以创建泛型代码,提高代码重用性。 - **模板约束**:可以指定模板参数必须满足的条件,增强了模板的灵活性。 5. **内存管理**: - **垃圾回收**:D...

    C#新中新DKQ-116D二次开发代码

    C#作为一种广泛应用于Windows桌面应用开发的语言,其强大的面向对象特性和丰富的类库使得开发工作变得更加高效。本文将深入探讨"C#新中新DKQ-116D二次开发代码",主要关注Winform和Webform的二次开发,以及解决...

    学习D语言的tango:第二章 D语言基础

    Tango库是D语言的一个重要组成部分,提供了丰富的功能,帮助开发者更高效地进行编程。 1. **D语言的基本语法** D语言的语法结构类似C/C++,但有诸多改进。例如,它引入了关键字`void`来声明无返回值的函数,以及`...

    D语言编程参考手册1.0

    - **DLL编程**:D语言可以用于创建DLL文件,并支持通过C接口与DLL交互。 #### 五、D语言的内存管理 D语言的内存管理机制非常灵活,既支持自动垃圾回收,也支持手动内存管理。对于特定的应用场景,可以选择最适合的...

    面向对象考试题

    当创建对象时,构造函数被自动调用来初始化该对象。 - **D. 析构函数** - 错误。 **9. 继承时不可吸收的成员** - **A. 公有成员** - 错误。公有成员会被继承。 - **B. 受保护性成员** - 错误。受保护性成员也会...

    道格拉斯.zip——D-P算法,完整的代码,程序可调试运行

    D-P算法,全称为动态规划(Dynamic Programming)算法,是一种解决最优化问题的有效方法,广泛应用于计算机科学、经济学、生物学等多个领域。在这个名为“道格拉斯.zip”的压缩包中,包含了一个使用C#编程语言实现的...

Global site tag (gtag.js) - Google Analytics