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



本人于2005.4月下旬开始编写代码生成器到今天为止已经差不多有个半月左右目前功能已基本实现开发过程中也遇到了很多困难在此感谢速马大版主给我无私帮助如果这篇文章能够对大家使用CodeDom开发有所帮助我会感到很高兴有关CodeDom介绍大家可以去msdn上看看在此我就不多说了
众所周知.NET是面向对象语言因此段代码里面就会有类、对象、接口、结构等和面向对象思想密切相关要素而类中会有属性、思路方法委托、事件等等再往下属性又有私有变量或公有变量这样层层就象颗树而这每个要素都和CodeDom命名空间下类有着对应关系当你想用CodeDom生成个类时必须先生成类中要素如属性、思路方法委托、事件等等生成属性时也必须先生成属性里要素这样每生成个要素只要找到CodeDom里对应类就行了是不是有点糊涂了
不要紧现在我给大家个例子看看可能就要明白些了
//保存源代码
Stream codeStream = File.Open(\"Test.cs\",FileMode.Create);
StreamWriter codeWriter = StreamWriter(codeStream); //创建个代码生成器例子
CSharpCodeProvider provider = CSharpCodeProvider;
ICodeGenerator codeGenerator = provider.CreateGenerator(codeWriter);
CodeGeneratorOptions codeGeneratorOptions = CodeGeneratorOptions;

//添加命名空间
CodeSnippetCompileUnit literal = CodeSnippetCompileUnit
(\"using ;\\nusing .Data;\\nusing .Data.SqlClient;\\n\");
codeGenerator.GenerateCodeFromCompileUnit(literal,codeWriter,codeGeneratorOptions);

//命名空间以及在此命名空间下面创建个类
CodeNamespace codeNamespace = CodeNamespace(\"Codedom\");
CodeTypeDeclaration codeTypeDeclaration = CodeTypeDeclaration;
codeTypeDeclaration.Name = \"TestClass\";
codeTypeDeclaration.IsClass = true;
codeTypeDeclaration.TypeAttributes = TypeAttributes.Public;
codeNamespace.Types.Add(codeTypeDeclaration);

//创建个默认构造
CodeConstructor codeConstructor = CodeConstructor;
codeConstructor.Attributes = MemberAttributes.Public;
codeTypeDeclaration.Members.Add(codeConstructor);

//创建个私有字段
CodeMemberField codeMember = CodeMemberField;
codeMember.Name = \"sTest\";
codeMember.Attributes = MemberAttributes.Private;
codeMember.Type = CodeTypeReference(typeof());
codeTypeDeclaration.Members.Add(codeMember);

//添加个可以操作和读取属性
CodeMemberProperty codeMemberProperty = CodeMemberProperty;
codeMemberProperty.Name = \"Test\";
codeMemberProperty.Attributes = MemberAttributes.Public;
codeMemberProperty.Type = CodeTypeReference(typeof());
codeMemberProperty.GetStatements.Add
(
CodeMethodReturnStatement
(
CodeFieldReferenceExpression( CodeThisReferenceExpression,\"sTest\")
)
);
codeMemberProperty.SetStatements.Add
(
CodeAssignStatement
(
CodeFieldReferenceExpression( CodeThisReferenceExpression,\"sTest\"), CodePropertySetValueReferenceExpression
)
);
codeTypeDeclaration.Members.Add(codeMemberProperty);
//生成代码
codeGenerator.GenerateCodeFromNamespace(codeNamespace,codeWriter,codeGeneratorOptions);

codeWriter.Close;
codeStream.Close;
运行结果如下:
using ;
using .Data;
using .Data.SqlClient;

Codedom{


public TestClass {

private sTest;

public TestClass {
}

public virtual Test {
get {
this.sTest;
}


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

Tags:  留言代码生成器 空间代码生成器 qq代码生成器 代码生成器

延伸阅读

最新评论

发表评论