C# 4.0、动态关键字与 COM
2010-09-30 22:44:44 来源:WEB开发网为了与 COM 自动化接口交互,您经常需要 Variant 类型。当您在基于 .NET Framework 的应用程序中与 COM 自动化对象交互时,您需要将 Variants 表示成普通对象。其直接后果是您不能使用字符串来指示 Word 文档所用的模板文件的名称,因为必须通过引用来传递 Variant 参数。您不得不求助于 Object,如下所示:
Object template = TemplateName;
var doc = wordApp.Documents.Add(ref template,
ref missingValue, ref missingValue, ref missingValue);
要考虑的第二个方面是 Visual Basic 和脚本语言远不如 C# 3.0 严格。例如,这些语言不会强制要求您指定 COM 对象声明上某个方法的所有参数。Documents 集合的 Add 方法需要四个参数,而除非您的语言支持可选参数,否则就不能忽略这些参数。
正如前文所述,C# 4.0 支持可选参数。这意味着,尽管直接用 C# 4.0 来重新编译图 4 中的代码就能正常使用,您可能仍会重写这段代码,删除所有用来传递缺少的值的 ref 参数,如下所示:
Object template = TemplateName;
var doc = wordApp.Documents.Add(template);
借助 C# 4.0 中新的“省略 ref”支持,图 4 中的代码变得更加简单,而且更重要的是,它变得更容易阅读,且语法上与脚本代码更像。图 5 包含编辑过的版本,该版本能够用 C# 4.0 进行正确编译,并且与图 4 中的代码效果相同。
图 5 在 C# 4.0 中创建新的 Word 文档
public static class WordDocument
{
public const String TemplateName = @"Sample.dotx";
public const String CurrentDateBookmark = "CurrentDate";
public const String SignatureBookmark = "Signature";
public static void Create(string file, DateTime now, String author)
{
// Run Word and make it visible for demo purposes
dynamic wordApp = new Application { Visible = true };
// Create a new document
var doc = wordApp.Documents.Add(TemplateName);
templatedDocument.Activate();
// Fill the bookmarks in the document
doc.Bookmarks[CurrentDateBookmark].Range.Select();
wordApp.Selection.TypeText(current.ToString());
doc.Bookmarks[SignatureBookmark].Range.Select();
wordApp.Selection.TypeText(author);
// Save the document
doc.SaveAs(fileName);
// Clean up
templatedDocument.Close();
wordApp.Quit();
}
}
更多精彩
赞助商链接