Поздняя привязка в решениях Office

Некоторые типы в объектных моделях Приложение Office ликации предоставляют функциональные возможности, доступные через функции последней привязки. Например, некоторые методы и свойства могут возвращать различные типы объектов в зависимости от контекста Приложение Office ликации, а некоторые типы могут предоставлять различные методы или свойства в разных контекстах.

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO. См. сведения о функциях, доступных по Приложение Office и типу проекта.

Проекты Visual Basic, в которых option Strict отключен, и проекты Visual C#, предназначенные для платформа .NET Framework 4 или платформа .NET Framework 4.5, могут работать непосредственно с типами, использующими эти функции последней привязки.

Неявное и явное приведение возвращаемых значений объекта

Многие методы и свойства в основных сборках взаимодействия Microsoft Office (PIA) возвращают Object значения, так как они могут возвращать несколько различных типов объектов. Например, свойство возвращает значение, ActiveSheet так как его возвращаемое значение может быть Worksheet или Chart объектом в зависимости от того, что такое активный Object лист.

При возврате Objectметода или свойства необходимо явно преобразовать объект (в Visual Basic) в правильный тип в проектах Visual Basic, где включен параметр Strict . Не нужно явно приведение возвращаемых Object значений в проектах Visual Basic, где параметр Strict отключен.

В большинстве случаев справочная документация содержит возможные типы возвращаемого значения для элемента, возвращающего объект Object. Преобразование или приведение объекта включает IntelliSense для объекта в редакторе кода.

Сведения о преобразовании в Visual Basic см. в статьях о неявных и явных преобразованиях (Visual Basic) и функции CType (Visual Basic).

Примеры

В следующем примере кода показано, как привести объект к конкретному типу в проекте Visual Basic, где включен параметр Strict . В этом типе проекта необходимо явно присвоить свойству CellsRangeзначение . В этом примере требуется проект Excel на уровне документа с именем Sheet1класса листа.

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

В следующем примере кода показано, как неявно привести объект к определенному типу в проекте Visual Basic, где параметр Strict отключен или в проекте Visual C#, предназначенный для платформа .NET Framework 4. В этих типах проектов Cells свойство неявно приведение к объекту Range. В этом примере требуется проект Excel на уровне документа с именем Sheet1класса листа.

Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

Доступ к членам, доступным только через позднюю привязку

Некоторые свойства и методы в пиА Office доступны только через позднюю привязку. В проектах Visual Basic, где параметр Strict отключен или в проектах Visual C#, предназначенных для платформа .NET Framework 4 или платформа .NET Framework 4.5, можно использовать функции последней привязки на этих языках для доступа к элементам с поздними привязками. В проектах Visual Basic, где включен параметр Strict , необходимо использовать отражение для доступа к этим членам.

Примеры

В следующем примере кода показано, как получить доступ к членам с поздними привязками в проекте Visual Basic, где option Strict отключен или в проекте Visual C#, который предназначен для платформа .NET Framework 4. В этом примере выполняется доступ к свойству "Имя" в диалоговом окне "Открыть файл" в Word. Чтобы использовать этот пример, запустите его из ThisDocument проекта Word или ThisAddIn класса.

dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

В следующем примере кода показано, как использовать отражение для выполнения той же задачи в проекте Visual Basic, где включен параметр Strict .

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))