紫冠道人的求道历程
CodeDOM这个东西虽然能生成大多数的程序代码,但它还是有点局限性的喽。我在写CodeDOM程序中就碰到过一些了,虽然有些特性是可以用其他方法代替的,但有些代码还是无法用CodeDOM写出来 。本来就是要写些最近在CodeDOM中碰到的问题的,但前两天在CodeProject上发现有人已经做过这样的事了http://www.codeproject.com/csharp/codedomparser.asp,虽然是两年前的文章,而且是在.NET1.0下的,但是比较的全面(有很多我还没碰到过,也没想到过,有几句还看得迷迷糊糊的),而且看来对CodeDOM来讲.NET1.0与NET1.1差别不大(可能没差别,没仔细确认过)。
/*下面这两个不是很清楚,Attribute targets与Attributes on accessor是什么意思呀。本来对.NET里的Attributes这东西就不是很熟悉。*/
PS:除了上面提到过的,在C#里的using语句也没有出现,看来在CodeDOM里这个using出的问题大了,只有引用程序集的那个using问题不大。后面在程序中我就直接用try…finally结构来代替using了。不过这是特定语言的问题,问题不大,而且有替代方法。
以上的都是类编写过程中碰到的问题为主,现在写的程序当然也是以上面的那些东西为多,去动态生成也主要是生成大同小异的类比较的多点。
在流程控制方面,CodeDOM对while、do…whle循环好象无能为力,没有if…else if…else if……else这种及switch(或select)这些多选择的语句。而且也没有break、continue这样的跳转语句,只有goto语句。一些跳转方面的可能是比较的特殊的需求了,程序要动态到这种程度也没什么的意思,但多分支选择,特别是switch这种的选择语句,来动态生成有时候还是有需要的,怎么会没有呢?
posted on 2004-11-17 15:35 lichdr 阅读(2463) 评论(10) 编辑 收藏 所属分类: CodeDOM
IL本身就只有Label和Goto,你怎样看? :) 回复 引用 查看
這個跟IL還是有區別的,用這個生成的要的是高級代碼。要求也要高點吧。 是不是可能這些跳轉不是語言的共性(有些語言不是這樣的),它就不實現了, 現在發現好象可以用CodeSnippetStatement來生成。這個Statement原來給出你要的東西。 回复 引用 查看
可以用CodeSnippetStatement生成很多语句,不过似乎对变量的类型声明上有一点点限制。 回复 引用
用CodeSnippetStatement基本不算是用CodeDOM的正道,特别是大量的使用CodeSnippetStatement 回复 引用 查看
while、do…whle循环是支持的. 回复 引用 查看
Snippets就是为了弥补CodeDOM的不足而产生的,可以说用它无所不能,但却失去了DOM的精神,所以楼主说“不算是用CodeDOM的正道”。 我需要从code转到CodeDOM,即Parse方法,楼主所说有文件可以直接编译,但是不是忽略了DOM可以为对代码有个性的这样的需求提供一个结构化的对象集,我就是需要用代码来修改代码,不知道我说的清楚没有,由于没有Parse方法,本来我写好一大段code期望可以Parse后供其他代码修改,现在只能手工一行行翻译成DOM,真是苦差。 我对“CodeCompile unit does not have space for using directives or ns members, so they are placed now into first default NS ”的理解, CodeCompile单元没有地方直接写"using"或namesapce成员,所以它们现在被放到第一个定义的namespace里面。 前面的"using"好理解,但“namesapce成员”如何理解呢? 回复 引用
上面回复的太快,“个性”应作“修改”,抱歉。 回复 引用
@BillySir Parse是个问题,写个Parse器,还不如直接修改source方便,就当是字符串操作吧。 回复 引用 查看
请问要编一个对C#语法程序的词法分析器,codeDom中有没有什么方法和类封装了这样的功能,可以被直接使用的?或者C#中有没有其他这样的类或方法?词法分析程序中要提取程序的单词,并对单词的种类进行识别,以及程序中声明了什么类,变量;每个对象又是什么类型等等。谢谢! 回复 引用
@vivisimo没有这种功能,反正以前微软只提供了一个没有任何实现的空的接口在那。不知新版本后有什么改进。 回复 引用 查看
Powered by: 博客园 Copyright © lichdr