从Component对象到CodeDom——舞动你的Code系列(1)
来源:互联网 发布:西安网星软件怎么样 编辑:程序博客网 时间:2024/05/21 17:28
我们经常会有这样的需求或者想法:动态的生成或者修改代码。当然,我们可以把代码看成字符串而直接修改,但是这种做法也未免太生硬了,能解决的问题有限;而另一个方式就是CodeDom。
CodeDom是强大的!我们感谢微软,给我们提供了强大的描述面向对象语言的框架;我们感谢微软,给我们提供了能够根据CodeDom生成代码或者程序集的CodeDomProvider;我们又强烈的鄙视微软,没有给我们提供能够从object或者代码生成CodeDom的能力。
关于CodeDom的知识本文不过多涉及、感兴趣的童鞋可以阅读MSDN或者博客园的其它文章学习了解。本系列期望解决的问题就是如何将对象或者代码生成CodeDom。当然,由于微软并没有提供这样的支持,而我也不可能写一个解析C#语言或者VB语言的CodeParser,所以本文提供的方案也能力有限,但愿能够解决你的一部分问题或者给您能学到点知识。
这是本系列的第一篇文章,如何让一个Component对象生成CodeDom。核心思想就是虚拟一个DesignTime的环境,并将Component添加到Designer中,然后使用ComponentTypeCodeDomSerializer将Component序列化成CodeTypeDeclaration。本方案可以在任意程序下执行,不依赖IDE,也不需要引用各种奇怪的dll。
下面就是具体实现:
首先,创建一个WindowsControlLibrary,名叫WindowsControlLibrary1。
然后,添加一个类取名MyComponent1,类中有一个GetSet的属性IntProperty,还有一个设置了背景色的TextBox:
接着创建另一个WindowsFormsApplication项目:CodeDomSample,并引用System.Design和WindowsControlLibrary1项目(当然,你也可以把WindowsControlLibrary1编译成dll并引用这个dll)
现在,创建我们的核心类CodeTypeConverter,对于具体实现我不做过多的说明,你不必要关心实现的具体细节,只要这个实现能够满足你的需求就行了。如果你有看不明白的地方请提问,我会认真回到。
好了,CodeTypeConverter实现完成。现在在Form1中写一个Test方法测试:
CodeDomSample跑起来以后,就可以在输出窗口看到如下的输出:
搞定收工。欢迎提问以及拍砖灌水,更欢迎掌声鲜花。
- 从Component对象到CodeDom——舞动你的Code系列(1)
- 舞动的青春(1)
- CodeDom 系列:代码文档对象模型
- NHibernate从入门到精通系列(4)——持久对象的生命周期(上)
- NHibernate从入门到精通系列(5)——持久对象的生命周期(下)
- 新的领域----舞动你的生活
- (更新到 2009-1-5) 两个新的系列文章的写作计划——《LoadRunner 没有告诉你的》和《JMeter从入门到精通》
- 舞动红楼梦——蒋勋
- 舞动JAVA语言的舞池——JVM
- CodeDom计算器——动态计算数学表达式的实现
- 使用CodeDom生成程序集(在你的代码中用程序生成一个程序)
- Mule ESB的component(三)——Java Component
- Dynamic Code Generation using CodeDOM
- 自制小四轴:从入门到放弃——基于stm32的小四轴系列(一)
- 自制小四轴:从入门到放弃——基于stm32的小四轴系列(二)
- Hibernate从入门到精通(2)-component(组件)
- C#动态生成代码——CodeDom
- 《舞动的排序算法》——这才是同学们想要的效果!常看常新
- WINCE的BIB文件解析
- LINUX 编译内核选项 向作者致敬
- SP2010: SharePoint Site和Web Application概念区别
- php ob_* 总结
- IDOC 标准Segment的修改一法 (后台定义表调整)
- 从Component对象到CodeDom——舞动你的Code系列(1)
- linux常用命令
- yum命令详解
- oracle 10046使用学习
- S3C2410下mplayer音视频播放器移植
- xajax单引号和双引号的问题
- 关于ASP.NET中FORM验证的写法?
- Android开发基础:创建菜单Menu
- Linux 时钟管理