Partilhar via


Vinculação tardia em soluções do Office

Alguns tipos nos modelos de objeto de aplicativos do Office fornecem funcionalidade que está disponível por meio de recursos de associação tardia. Por exemplo, alguns métodos e propriedades podem retornar diferentes tipos de objetos, dependendo do contexto do aplicativo do Office, e alguns tipos podem expor métodos ou propriedades diferentes em contextos diferentes.

Aplica-se a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de suplemento VSTO. Consulte Recursos disponíveis por aplicativo do Office e tipo de projeto.

Projetos do Visual Basic onde a opção estrita está desativada e projetos do Visual C# destinados ao .NET Framework 4 ou ao .NET Framework 4.5 podem trabalhar diretamente com tipos que empregam esses recursos de associação tardia.

Transmissão implícita e explícita de valores de retorno de objeto

Muitos métodos e propriedades nos assemblies de interoperabilidade primária (PIAs) do Microsoft Office retornam valores Object, porque podem retornar diferentes tipos de objetos. Por exemplo, a ActiveSheet propriedade retorna um Object porque seu valor de retorno pode ser um Worksheet ou Chart objeto, dependendo do que é a planilha ativa.

Quando um método ou propriedade retorna um Object, você deve converter explicitamente (no Visual Basic) o objeto para o tipo correto em projetos do Visual Basic onde Option Strict está ativado. Não é necessário converter explicitamente os valores de retorno em projetos do Visual Basic onde Option Strict está desativado.

Na maioria dos casos, a documentação de referência lista os tipos possíveis do valor de retorno para um membro que retorna um Object. Converter ou transmitir o objeto habilita o IntelliSense para o objeto no Editor de Códigos.

Para obter informações sobre conversão no Visual Basic, consulte Conversões implícitas e explícitas (Visual Basic) e Função CType (Visual Basic).

Examples

O exemplo de código a seguir demonstra como converter um objeto para um tipo específico em um projeto do Visual Basic onde Option Strict está ativado. Nesse tipo de projeto, deves converter explicitamente a Cells propriedade para um Range. Este exemplo requer um projeto do Excel no nível de documento com uma classe de planilha chamada Sheet1.

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

O exemplo de código a seguir demonstra como converter implicitamente um objeto para um tipo específico em um projeto Visual Basic onde Option Strict está desativado ou em um projeto Visual C# que tem como alvo o .NET Framework 4. Nestes tipos de projetos, a Cells propriedade é implicitamente moldada para um Range. Este exemplo requer um projeto do Excel no nível de documento com uma classe de planilha chamada Sheet1.

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

Acessar membros que estão disponíveis somente por meio de vinculação tardia

Algumas propriedades e métodos nos PIAs do Office estão disponíveis somente por meio de vinculação tardia. Em projetos do Visual Basic onde a opção Strict está desativada ou em projetos do Visual C# destinados ao .NET Framework 4 ou ao .NET Framework 4.5, você pode usar os recursos de associação tardia nesses idiomas para acessar membros de associação tardia. Em projetos do Visual Basic onde a opção Strict está ativada, você deve usar a reflexão para acessar esses membros.

Examples

O exemplo de código a seguir demonstra como aceder a membros de ligação tardia num projeto do Visual Basic onde Option Strict está desativado ou num projeto Visual C# destinado ao .NET Framework 4. Este exemplo acede à propriedade Name atrasada da caixa de diálogo Abrir Ficheiro no Word. Para usar este exemplo, execute-o a partir da classe ThisDocument ou ThisAddIn num projeto Word.

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

O exemplo de código a seguir demonstra como usar a reflexão para realizar a mesma tarefa em um projeto do Visual Basic onde Option Strict está ativado.

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