动态生成一个类对于aop,o/r mapping等技术非常有帮助.对于java来说,问题不大,而对于.net,则要麻烦些(主要麻烦在于实现代码的生成需要il),故猜测这可能也是在aop, o/r mapping方面,java走得略前的原因吧.
假设有如下接口: 【程序编程相关:坚持学asp.net——(八) 】
麻烦归麻烦,非不能也,动态生成一个简单的类还不至于太难. 【推荐阅读:Regular Expressions 】
{ 【扩展信息:软件测试之我见---现状篇】 interface ianimal void move(); void eat(); }希望能创建一个类生成器typecreator,并能以以下方式使用:typecreator tc=new typecreator(typeof(ianimal)); type t = tc.build(); ianimal myanimal= (ianimal)activator.createinstance(t); myanimal.move(); myanimal.eat();首先,发现system.reflection.emit.typebuilder似乎就是一个现成的类生成器. 不过typebuilder既没有实用的static方法,也不能在外部实例化.不过modulebuilder倒有一个definetype()方法,可以得到typebuilder;而modulebuilder与typerbuilder一个德行,不能直接创建,得从assemblybuilder的definedynamicmodule()方法得到.追根溯源,assemblybuilder得从appdomain的definedynamicassembly()的得来.最终好在appdomain提供了一个静态方法:appdomain.currentdomain. 这一连串并非没有道理,类型是依附于module的,而module依附于assembly,而assembly则被appdomain装载.所谓“皮之不存,毛将焉附”,为了创建type这个“毛”,得先把assembly,module这些“皮”依次构造出来:
... 下一页