分享
 
 
 

使用CodeDom开发基于B/S的.NET+MSSQL代码生成器的随感

王朝mssql·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

本人于2005.4月下旬开始编写代码生成器,到今天为止,已经差不多有一个半月左右,目前功能已基本实现,开发过程中,也遇到了很多的困难,在此感谢速马大版主给我的无私帮助,如果这篇文章能够对大家使用CodeDom开发有所帮助的话,我会感到很高兴,关于CodeDom的介绍大家可以去msdn上看看,在此我就不多说了。

众所周知,.NET是面向对象的语言,因此一段代码里面就会有类、对象、接口、结构等与面向对象的思想密切相关的要素,而类中会有属性、方法,委托、事件等等,再往下属性又有私有变量或公有变量,这样一层层就象一颗树一样,而这每一个要素都与CodeDom命名空间下的类有着一一对应的关系,当你想用CodeDom生成一个类时,必须先生成类中的要素,如属性、方法,委托、事件等等,生成属性时,也必须先生成属性里的要素,这样一来,每生成一个要素,只要找到CodeDom里对应的类就行了,呵,是不是有点糊涂了。

不要紧,现在我给大家一个例子看看,可能就要明白些了。

//保存源代码的流。

Stream codeStream = File.Open("Test.cs",FileMode.Create);

StreamWriter codeWriter = new StreamWriter(codeStream);

//创建一个代码生成器实例

CSharpCodeProvider provider = new CSharpCodeProvider();

ICodeGenerator codeGenerator = provider.CreateGenerator(codeWriter);

CodeGeneratorOptions codeGeneratorOptions = new CodeGeneratorOptions();

//添加命名空间

CodeSnippetCompileUnit literal = new CodeSnippetCompileUnit

("using System;\nusing System.Data;\nusing System.Data.SqlClient;\n");

codeGenerator.GenerateCodeFromCompileUnit(literal,codeWriter,codeGeneratorOptions);

//命名空间以及在此命名空间下面创建一个类

CodeNamespace codeNamespace = new CodeNamespace("Codedom");

CodeTypeDeclaration codeTypeDeclaration = new CodeTypeDeclaration();

codeTypeDeclaration.Name = "TestClass";

codeTypeDeclaration.IsClass = true;

codeTypeDeclaration.TypeAttributes = TypeAttributes.Public;

codeNamespace.Types.Add(codeTypeDeclaration);

//创建一个默认的构造函数

CodeConstructor codeConstructor = new CodeConstructor();

codeConstructor.Attributes = MemberAttributes.Public;

codeTypeDeclaration.Members.Add(codeConstructor);

//创建一个私有的字段

CodeMemberField codeMember = new CodeMemberField();

codeMember.Name = "sTest";

codeMember.Attributes = MemberAttributes.Private;

codeMember.Type = new CodeTypeReference(typeof(string));

codeTypeDeclaration.Members.Add(codeMember);

//添加一个可以操作和读取的属性

CodeMemberProperty codeMemberProperty = new CodeMemberProperty();

codeMemberProperty.Name = "Test";

codeMemberProperty.Attributes = MemberAttributes.Public;

codeMemberProperty.Type = new CodeTypeReference(typeof(string));

codeMemberProperty.GetStatements.Add

(

new CodeMethodReturnStatement

(

new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"sTest")

)

);

codeMemberProperty.SetStatements.Add

(

new CodeAssignStatement

(

new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"sTest"),new CodePropertySetValueReferenceExpression()

)

);

codeTypeDeclaration.Members.Add(codeMemberProperty);

//生成代码

codeGenerator.GenerateCodeFromNamespace(codeNamespace,codeWriter,codeGeneratorOptions);

codeWriter.Close();

codeStream.Close();

运行结果如下:

using System;

using System.Data;

using System.Data.SqlClient;

namespace Codedom{

public class TestClass {

private string sTest;

public TestClass() {

}

public virtual string Test {

get {

return this.sTest;

}

set {

this.sTest = value;

}

}

}

}

以上的代码理解起来并不难,只要大家看一看运行的结果就会明白了,里面具体所用到的类可以在MSDN里查到,今天暂时就写到这里吧,希望能给大家起一个抛砖引玉的作用,呵呵,如果想和我交流的朋友,可以发邮件到我的邮箱:lm517@qq.com,最后告诉大家:掌握CodeDom并不难。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有