CodeDom使用笔记(四)

事件的响应:

/// <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();
}


完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值