Partager via


Liaison tardive dans les solutions Office

Certains types des modèles objets d'applications Office fournissent des fonctionnalités disponibles via des fonctionnalités de liaison tardive. Par exemple, certaines méthodes et propriétés peuvent retourner différents types d'objets selon le contexte de l'application Office et certains types peuvent exposer différentes méthodes ou propriétés dans différents contextes.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et de niveau application pour Microsoft Office 2010 et la version 2007 de Microsoft® Office System. Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Les projets Visual Basic dans lesquels Option Strict est désactivé et les projets Visual C# qui ciblent .NET Framework 4 peuvent fonctionner directement avec les types qui utilisent ces fonctionnalités de liaison tardive. Les projets Visual Basic dans lesquels Option Strict est activé et les projets Visual C# qui ciblent .NET Framework 3.5 doivent utiliser la conversion ou la réflexion pour utiliser ces types.

Conversion implicite et explicite des valeurs de retour d'objet

De nombreuses méthodes et propriétés des assemblys PIA (Primary Interop Assembly) Microsoft Office retournent des valeurs Object, car elles peuvent retourner plusieurs types d'objets différents. Par exemple, la propriété ActiveSheet retourne Object car sa valeur de retour peut être un objet Worksheet ou Chart, selon la feuille active.

Lorsqu'une méthode ou une propriété retourne Object, vous devez convertir explicitement (en Visual Basic) ou caster (en C#) l'objet en type correct dans les projets Visual Basic dans lesquels Option Strict est activé et dans les projets Visual C# qui ciblent .NET Framework 3.5. Vous n'avez pas à caster explicitement des valeurs de retour Object dans les projets Visual Basic dans lesquels Option Strict est désactivé et dans les projets Visual C# qui ciblent .NET Framework 4.

Dans la plupart des cas, la documentation de référence répertorie les types de valeur de retour possibles pour un membre qui retourne Object. La conversion ou le cast de l'objet active la fonctionnalité IntelliSense relative à cet objet dans l'éditeur de code.

Pour plus d'informations sur la conversion en Visual Basic, consultez Conversions implicites et explicites (Visual Basic) et Fonction CType (Visual Basic). Pour plus d'informations sur la façon de caster en Visual C#, consultez Cast et conversions de types (Guide de programmation C#) et (), opérateur (référence C#).

Exemples

L'exemple de code suivant montre comment effectuer un cast d'un objet en un type spécifique dans un projet Visual Basic dans lequel Option Strict est activé ou dans un projet Visual C# qui cible .NET Framework 3.5. Dans ces types de projets, vous devez caster explicitement la propriété Cells en Range. Cet exemple requiert un projet Excel de niveau document avec une classe de feuille de calcul nommée Sheet1.

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

L'exemple de code suivant montre comment caster implicitement un objet en un type spécifique dans un projet Visual Basic dans lequel Option Strict est désactivé ou dans un projet Visual C# qui cible .NET Framework 4. Dans ces types de projets, la propriété Cells est castée implicitement en Range. Cet exemple requiert un projet Excel de niveau document avec une classe de feuille de calcul nommée Sheet1.

Dim dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

Accès à des membres disponibles uniquement via une liaison tardive

Certaines propriétés et méthodes des assemblys PIA Office sont uniquement disponibles via une liaison tardive. Dans les projets Visual Basic dans lesquels Option Strict est désactivé ou dans les projets Visual C# qui ciblent .NET Framework 4, vous pouvez utiliser les fonctions de liaison tardive dans ces langages pour accéder aux membres à liaison tardive. Dans les projets Visual Basic où Option Strict est activé ou dans les projets Visual C# qui ciblent le .NET Framework 3.5, vous devez utiliser la réflexion pour accéder à ces membres.

Exemples

L'exemple de code suivant montre comment accéder aux membres à liaison tardive dans un projet Visual Basic dans lequel Option Strict est désactivé ou dans un projet Visual C# qui cible .NET Framework 4. Cet exemple accède à la propriété Name à liaison tardive de la boîte de dialogue Ouvrir dans Word. Pour utiliser cet exemple, exécutez-le à partir de la classe ThisDocument ou ThisAddIn dans un projet 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);

L'exemple de code suivant montre comment utiliser la réflexion pour accomplir la même tâche dans un projet Visual Basic dans lequel Option Strict est activé ou dans un projet Visual C# qui cible .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());

Voir aussi

Référence

Option Strict, instruction

Réflexion (C# et Visual Basic)

Concepts

Écriture de code dans les solutions Office

Paramètres optionnels dans les solutions Office

Autres ressources

Utilisation du type dynamic (Guide de programmation C#)

Conception et création de solutions Office