Office 解决方案中的后期绑定

Office 应用程序的对象模型中的某些类型提供了可通过后期绑定功能使用的功能。例如,某些方法和属性可以根据 Office 应用程序的上下文返回不同类型的对象,而某些类型可以在不同的上下文中公开不同的方法或属性。

**适用于:**本主题中的信息适用于 Office 2013 和 Office 2010 的文档级项目和应用程序级项目。请参见按 Office 应用程序和项目类型提供的功能

Visual Basic 项目 Option Strict 位置关闭,并且 Visual C# 项目目标 .NET Framework 4 或 .NET Framework 4.5 能直接使用这些后期绑定功能的类型一起使用。

对象返回值的隐式和显式强制转换

Microsoft Office 主互操作程序集 (PIA) 中的许多方法和属性都返回 Object 值,因为它们能够返回一些不同类型的对象。例如,ActiveSheet 属性返回 Object,因为其返回值可以为 WorksheetChart 对象,具体情况视活动工作表而定。

当方法或属性返回 Object时,必须显式转换 (在 Visual Basic 中) 为正确的对象输入 Option Strict 打开状态的 Visual Basic 项目。您无需显式转换 Object 返回在 Option Strict 关闭状态的 Visual Basic 项目的值。

大多数情况下,参考文档为返回 Object 的成员列出了返回值的可能类型。通过转换或强制转换对象,可以在代码编辑器中为该对象启用 IntelliSense 功能。

有关在 Visual Basic 中转换的信息,请参见隐式转换和显式转换 (Visual Basic)CType 函数 (Visual Basic)

3xxe951d.collapse_all(zh-cn,VS.110).gif示例

下面的代码示例演示如何转换为特定的对象输入 Option Strict 打开状态的 Visual Basic 项目。此项目类型,您必须显式强制转换 Cells 属性设置为 Range。此示例需要一个带有名为 Sheet1 的工作表类的文档级 Excel 项目。

Dim castRange As Excel.Range = CType(Globals.Sheet1.Cells(1, 1), Excel.Range)

下面的代码示例演示如何将对象隐式强制转换为 Option Strict 处于关闭状态的 Visual Basic 项目或面向 .NET Framework 4 的 Visual C# 项目中的特定类型。在这些类型的项目中,Cells 属性将隐式强制转换为 Range。此示例需要一个带有名为 Sheet1 的工作表类的文档级 Excel 项目。

Dim dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

访问只能通过后期绑定使用的成员

Office PIA 中的某些属性和方法只能通过后期绑定使用。在 Visual Basic 在这些语言项目 Option Strict 或在 Visual C# 项目面向 .NET Framework 4 或 .NET Framework 4.5的位置,可以使用后期绑定功能来访问后期绑定的成员。在 Visual Basic 项目 Option Strict 位置打开,您必须使用反射来访问这些成员。

3xxe951d.collapse_all(zh-cn,VS.110).gif示例

下面的代码示例演示如何在 Option Strict 处于关闭状态的 Visual Basic 项目或面向 .NET Framework 4 的 Visual C# 项目中访问后期绑定的成员。此示例访问 Word 中**“打开文件”**对话框的后期绑定 Name 属性。若要使用此示例,请从 Word 项目内的 ThisDocument 或 ThisAddIn 类中运行此示例。

Private Sub TestDynamicDialog()
    Dim dialog As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
    dialog.Name = "Testing"
    dialog.Show()
    MessageBox.Show(dialog.Name)
End Sub
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

下面的代码示例演示如何使用反射来完成 Option Strict 打开状态的 Visual Basic 项目中的相同任务。

Dim dlg As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
Dim dlgType As Type = GetType(Word.Dialog)

' Set the Name property of the dialog box.
dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.SetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, New Object() {"Testing"}, _
    System.Globalization.CultureInfo.InvariantCulture)

' Display the dialog box.
dlg.Show()

' Show the Name property.
MessageBox.Show(dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.GetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, Nothing, _
    System.Globalization.CultureInfo.InvariantCulture))

请参见

参考

Option Strict 语句

反射(C# 和 Visual Basic)

概念

在 Office 解决方案中编写代码

Office 解决方案中的可选参数

其他资源

使用类型 dynamic(C# 编程指南)

设计和创建 Office 解决方案