事件的响应:
/// <summary>
/// 生成形如
/// this.button1.Click += new System.EventHandler(this.button1_Click);
/// 的代码
/// </summary>
public static CodeStatement GenerateAttachEventStatement(string ctrlName, string eventType, string eventName)
{
return new CodeAttachEventStatement(
new CodePropertyReferenceExpression(
new CodeThisReferenceExpression(), ctrlName),
eventName,
new CodeObjectCreateExpression(eventType,
new CodeExpression[]
{
new CodePropertyReferenceExpression(
new CodeThisReferenceExpression(), ctrlName+"_"+eventName)
}));
}
/// <summary>
/// 生成形如
/// this.button1.Click -= new System.EventHandler(this.button1_Click);
/// 的代码
/// </summary>
public static CodeStatement GenerateRemoveEventStatement(string ctrlName, string eventType, string eventName)
{
return new CodeRemoveEventStatement(
new CodePropertyReferenceExpression(
new CodeThisReferenceExpression(), ctrlName),
eventName,
new CodeObjectCreateExpression(eventType,
new CodeExpression[]
{
new CodePropertyReferenceExpression(
new CodeThisReferenceExpression(), ctrlName+"_"+eventName)
}));
}
生成文件注释,例如Dispose方法的注释可以这样生成:
DisposeMethod.Comments.Add(new CodeCommentStatement("<summary>\n 清理所有正在使用的资源。\n </summary>\n <param name=\"disposing\">如果应释放托管资源,为 true;否则为 false。</param>", true));
生成注释为:
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
...
}
最后一步,将CodeDom生成到C#文件需要使用到CSharpCodeProvider。
代码:
using Microsoft.CSharp;
public static void GenerateCSharpCode(CodeCompileUnit compileunit, string compileName)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
string sourceFile = compileName + "." + provider.FileExtension;
IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), " ");
//设置代码生成选项
CodeGeneratorOptions geneop = new CodeGeneratorOptions();
//括号另起一行
geneop.BracingStyle = "C";
//类成员之间空行
geneop.BlankLinesBetweenMembers = true;
//按类成员添加顺序输出,否则默认类成员在方法前
geneop.VerbatimOrder = true;
provider.GenerateCodeFromCompileUnit(compileunit, tw, geneop);
tw.Close();
}
完。
————————————————
版权声明:本文为CSDN博主「莱昂纳多达芬奇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/davinciyxw/article/details/7859775