Enlace en tiempo de demora en soluciones de Office

Algunos tipos de los modelos de objetos de aplicación de Office lications proporcionan funcionalidad que está disponible a través de características de enlace en tiempo de expiración. Por ejemplo, algunos métodos y propiedades pueden devolver diferentes tipos de objetos en función del contexto de la aplicación de Office lication, y algunos tipos pueden exponer diferentes métodos o propiedades en contextos diferentes.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO. Consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Los proyectos de Visual Basic en los que Option Strict está desactivado y los proyectos de Visual C# que tienen como destino .NET Framework 4 o .NET Framework 4.5 pueden funcionar directamente con tipos que emplean estas características de enlace en tiempo de espera.

Conversión implícita y explícita de valores devueltos de objetos

Muchos métodos y propiedades de los ensamblados de interoperabilidad primarios (PIA) de Microsoft Office devuelven Object valores, ya que pueden devolver varios tipos diferentes de objetos. Por ejemplo, la ActiveSheet propiedad devuelve porque Object su valor devuelto puede ser un Worksheet objeto o Chart , dependiendo de cuál es la hoja activa.

Cuando un método o propiedad devuelve un Object, debe convertir explícitamente (en Visual Basic) el objeto al tipo correcto en los proyectos de Visual Basic en los que Option Strict está activado. No es necesario convertir Object explícitamente valores devueltos en proyectos de Visual Basic donde Option Strict está desactivado.

En la mayoría de los casos, la documentación de referencia enumera los posibles tipos del valor devuelto para un miembro que devuelve un Object. La conversión o conversión del objeto habilita IntelliSense para el objeto en el Editor de código.

Para obtener información sobre la conversión en Visual Basic, vea Conversiones implícitas y explícitas (Visual Basic) y función CType (Visual Basic).

Ejemplos

En el ejemplo de código siguiente se muestra cómo convertir un objeto a un tipo específico en un proyecto de Visual Basic en el que option Strict está activado. En este tipo de proyecto, debe convertir explícitamente la Cells propiedad en .Range En este ejemplo se requiere un proyecto de Excel de nivel de documento con una clase de hoja de cálculo denominada Sheet1.

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

En el ejemplo de código siguiente se muestra cómo convertir implícitamente un objeto a un tipo específico en un proyecto de Visual Basic donde Option Strict está desactivado o en un proyecto de Visual C# destinado a .NET Framework 4. En estos tipos de proyectos, la Cells propiedad se convierte implícitamente en .Range En este ejemplo se requiere un proyecto de Excel de nivel de documento con una clase de hoja de cálculo denominada Sheet1.

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

Acceso a miembros que solo están disponibles a través del enlace en tiempo de cola

Algunas propiedades y métodos de los PIA de Office solo están disponibles a través del enlace en tiempo de ejecución. En proyectos de Visual Basic en los que Option Strict está desactivado o en proyectos de Visual C# que tienen como destino .NET Framework 4 o .NET Framework 4.5, puede usar las características de enlace en tiempo de ejecución en estos lenguajes para acceder a los miembros enlazados en tiempo de ejecución. En los proyectos de Visual Basic en los que option Strict está activado, debe usar la reflexión para acceder a estos miembros.

Ejemplos

En el ejemplo de código siguiente se muestra cómo acceder a los miembros enlazados en tiempo de ejecución en un proyecto de Visual Basic donde Option Strict está desactivado o en un proyecto de Visual C# destinado a .NET Framework 4. En este ejemplo se obtiene acceso a la propiedad Name enlazada en tiempo de ejecución del cuadro de diálogo Abrir archivo en Word. Para usar este ejemplo, ejecútelo desde la ThisDocument clase o ThisAddIn en un proyecto de Word.

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

En el ejemplo de código siguiente se muestra cómo usar la reflexión para realizar la misma tarea en un proyecto de Visual Basic en el que option Strict está activado.

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