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

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

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

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

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

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

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

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

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

Примеры

В следующем примере кода показано, как привести объект к конкретному типу в проекте Visual Basic, где включен параметр Strict . В этом типе проекта необходимо явно привести свойство Cells к Range. В этом примере требуется проект 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 PIA доступны только при использовании позднего связывания. В проектах Visual Basic, где параметр Strict отключен или в проектах Visual C#, предназначенных для .NET Framework 4 или .NET Framework 4.5, можно использовать функции последней привязки на этих языках для доступа к членам с поздними привязками. В проектах Visual Basic, где включен параметр Strict , необходимо использовать отражение для доступа к этим членам.

Примеры

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

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