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

Alguns tipos nos modelos de objeto de aplicativos do Office fornecem funcionalidade 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 diferentes métodos ou propriedades em contextos diferentes.

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

Projetos do Visual Basic em que o Option Strict está desativado e os projetos do Visual C# direcionados ao .NET Framework 4 ou ao .NET Framework 4.5 podem trabalhar diretamente com tipos que empregam esses recursos de associação tardia.

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

Muitos métodos e propriedades nos PIAs (assemblies de interoperabilidade primários) do Microsoft Office retornam Object valores, pois podem retornar vários tipos diferentes de objetos. Por exemplo, a propriedade ActiveSheet retorna um Object, porque seu valor retornado pode ser um objeto Worksheet ou um objeto Chart, dependendo de qual é 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 em que o Option Strict está ativado. Você não precisa converter os valores de retorno explicitamente em projetos do Visual Basic onde o Object está desativado.

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

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

Exemplos

O exemplo de código a seguir demonstra como converter um objeto em um tipo específico em um projeto do Visual Basic em que o Option Strict está ativado. Nesse tipo de projeto, você deve converter explicitamente a Cells propriedade em um Range. Este exemplo requer um projeto do Excel no nível do 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 em um tipo específico em um projeto do Visual Basic onde Option Strict está desativado ou em um projeto do Visual C# que tem como alvo o .NET Framework 4. Nesses tipos de projetos, a Cells propriedade é implicitamente convertida em um Range. Este exemplo requer um projeto do Excel no nível do 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 associação tardia

Algumas propriedades e métodos nos PIAs do Office estão disponíveis somente por meio de associação tardia. Em projetos do Visual Basic em que o Option Strict está desativado ou em projetos do Visual C# direcionados ao .NET Framework 4 ou ao .NET Framework 4.5, você pode usar os recursos de associação tardia nesses idiomas para acessar membros com limite tardio. Em projetos do Visual Basic onde o Option Strict está ativado, você deve usar reflexão para acessar esses membros.

Exemplos

O exemplo de código a seguir demonstra como acessar membros com associação tardia em um projeto do Visual Basic com Option Strict desativado ou em um projeto do Visual C# que visa o .NET Framework 4. Este exemplo acessa a propriedade de associação tardia Nome da caixa de diálogo Abrir Arquivo no Word. Para usar este exemplo, execute-o a partir da classe ThisDocument ou ThisAddIn em um projeto do 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 em que o 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))