Compartir a través de


Enlace en tiempo de ejecución en las soluciones de Office

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

Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación para Microsoft Office 2010 y 2007 Microsoft Office System. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

Los proyectos de Visual Basic en los que Option Strict esté desactivada y los proyectos de Visual C# destinados a .NET Framework 4 pueden usar directamente tipos que empleen estas características de enlace en tiempo de ejecución. Los proyectos de Visual Basic en los que Option Strict esté activada y los proyectos de Visual C# destinados a .NET Framework 3.5 deben recurrir a la conversión o reflexión para usar estos tipos.

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

Muchos métodos y propiedades de los ensamblados de interoperabilidad primarios (PIA) de Microsoft Office devuelven valores Object, porque tienen la capacidad de devolver varios tipos de objetos diferentes. Por ejemplo, la propiedad ActiveSheet devuelve Object porque su valor devuelto puede ser el objeto Chart o Worksheet, dependiendo de qué sea la hoja activa.

Cuando un método o una propiedad devuelve Object, el objeto se debe convertir explícitamente al tipo correcto en los proyectos de Visual Basic en que Option Strict esté activada y en los proyectos de Visual C# destinados a .NET Framework 3.5. No tiene que convertir explícitamente los valores devueltos Object en los proyectos de Visual Basic en que Option Strict está desactivada y en los proyectos de Visual C# destinados a .NET Framework 4.

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

Para obtener información sobre las conversiones en Visual Basic, vea Conversiones implícita y explícita (Visual Basic) y CType (Función) (Visual Basic). Para obtener información sobre cómo convertir en Visual C#, vea Conversiones de tipos (Guía de programación de C#) y () (operador) (Referencia de C#).

Ejemplos

En el siguiente ejemplo de código se muestra cómo convertir un objeto a un tipo específico en un proyecto de Visual Basic donde Option Strict está activada o en un proyecto de Visual C# destinado a .NET Framework 3.5. En estos tipos de proyectos, debe convertir explícitamente la propiedad Cells a 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)
Excel.Range castRange = (Excel.Range)Globals.Sheet1.Cells[1, 1];

En el siguiente ejemplo de código se muestra cómo convertir implícitamente un objeto a un tipo específico en un proyecto de Visual Basic donde Option Strict está desactivada o en un proyecto de Visual C# destinado a .NET Framework 4. En estos tipos de proyectos, la propiedad Cells se convierte implícitamente a 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 dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

Obtener acceso a miembros que solo están disponibles a través del enlace en tiempo de ejecución

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 los proyectos de Visual Basic donde Option Strict está desactivada o en los proyectos de Visual C# destinados a .NET Framework 4, se pueden usar las características de enlace en tiempo de ejecución de estos lenguajes para tener acceso a los miembros enlazados en tiempo de ejecución. En proyectos de Visual Basic donde Option Strict está activada o en proyectos de Visual C# destinados a .NET Framework 3.5, debe usar la reflexión para tener acceso a estos miembros.

Ejemplos

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

Private Sub TestDynamicDialog()
    Dim dialog As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
    dialog.Name = "Testing"
    dialog.Show()
    MessageBox.Show(dialog.Name)
End Sub
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

En el siguiente ejemplo de código se muestra cómo usar la reflexión para lograr la misma tarea en un proyecto de Visual Basic donde Option Strict está activada o en un proyecto de Visual C# destinado a .NET Framework 3.5.

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))
Word.Dialog dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
System.Type dialogType = typeof(Word.Dialog);

// Set the Name property of the dialog box.
dialogType.InvokeMember("Name", 
    System.Reflection.BindingFlags.SetProperty | 
        System.Reflection.BindingFlags.Public | 
        System.Reflection.BindingFlags.Instance,
    null, dialog, new object[] { "Testing" },
    System.Globalization.CultureInfo.InvariantCulture);

// Display the dialog box.
dialog.Show(ref missing); 

// Show the Name property.
MessageBox.Show(dialogType.InvokeMember("Name",
    System.Reflection.BindingFlags.GetProperty |
        System.Reflection.BindingFlags.Public |
        System.Reflection.BindingFlags.Instance,
    null, dialog, null,
    System.Globalization.CultureInfo.InvariantCulture).ToString());

Vea también

Referencia

Option Strict (Instrucción)

Reflexión (C# y Visual Basic)

Conceptos

Escribir código en soluciones de Office

Parámetros opcionales en las soluciones de Office

Otros recursos

Uso de tipo dinámico (Guía de programación de C#)

Diseñar y crear soluciones de Office