Dela via


Sen bindning i Office-lösningar

Vissa typer i objektmodellerna i Office-program tillhandahåller funktioner som är tillgängliga via funktioner för sen bindning. Vissa metoder och egenskaper kan till exempel returnera olika typer av objekt beroende på kontexten för Office-programmet, och vissa typer kan exponera olika metoder eller egenskaper i olika kontexter.

Gäller för: Informationen i det här avsnittet gäller för projekt på dokumentnivå och VSTO-tilläggsprojekt. Se Funktioner som är tillgängliga efter Office-program och projekttyp.

Visual Basic-projekt där Alternativ strikt är inaktiverat och Visual C#-projekt som riktar sig mot .NET Framework 4 eller .NET Framework 4.5 kan fungera direkt med typer som använder dessa funktioner för sen bindning.

Implicit och explicit konvertering av objektreturvärden

Många metoder och egenskaper i PIA:er (Primary Interop Assemblies) i Microsoft Office returnerar Object värden, eftersom de kan returnera flera olika typer av objekt. Till exempel returnerar egenskapen ActiveSheet en Object eftersom dess returvärde kan vara ett Worksheet- eller Chart-objekt, beroende på vilket det aktiva bladet är.

När en metod eller egenskap returnerar en Objectmåste du uttryckligen konvertera objektet (i Visual Basic) till rätt typ i Visual Basic-projekt där Alternativet Strikt är aktiverat. Du behöver inte uttryckligen konvertera Object returvärden i Visual Basic-projekt där Option Strict är avstängd.

I de flesta fall visar referensdokumentationen möjliga typer av returvärdet för en medlem som returnerar en Object. Om objektet konverteras eller omvandlas aktiveras IntelliSense för objektet i kodredigeraren.

Information om konvertering i Visual Basic finns i Implicita och explicita konverteringar (Visual Basic) och CType-funktionen (Visual Basic).

Examples

I följande kodexempel visas hur du omvandlar ett objekt till en viss typ i ett Visual Basic-projekt där Alternativet Strikt är aktiverat. I den här typen av projekt måste du uttryckligen omvandla Cells-egenskapen till en Range. Det här exemplet kräver ett Excel-projekt på dokumentnivå med en kalkylbladsklass med namnet Sheet1.

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

Följande kodexempel visar hur du implicit omvandlar ett objekt till en viss typ i ett Visual Basic-projekt där Alternativ strikt är inaktiverat eller i ett Visual C#-projekt som riktar sig mot .NET Framework 4. I dessa typer av projekt Cells omvandlas egenskapen implicit till en Range. Det här exemplet kräver ett Excel-projekt på dokumentnivå med en kalkylbladsklass med namnet Sheet1.

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

Åtkomstmedlemmar som endast är tillgängliga via sen bindning

Vissa egenskaper och metoder i Office PIA är endast tillgängliga via sen bindning. I Visual Basic-projekt där Alternativ strikt är inaktiverat eller i Visual C#-projekt som riktar sig mot .NET Framework 4 eller .NET Framework 4.5 kan du använda funktionerna för sen bindning på dessa språk för att få åtkomst till medlemmar med sen bindning. I Visual Basic-projekt där Option Strict är aktiverat måste du använda reflektion för att få åtkomst till dessa medlemmar.

Examples

Följande kodexempel visar hur du får åtkomst till medlemmar med sen bindning i ett Visual Basic-projekt där Alternativ strikt är inaktiverat eller i ett Visual C#-projekt som riktar sig till .NET Framework 4. Det här exemplet kommer åt egenskapen late-bound Name i dialogrutan Öppna fil i Word. Om du vill använda det här exemplet kör du det från ThisDocument klassen eller ThisAddIn i ett Word-projekt.

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

Följande kodexempel visar hur du använder reflektion för att utföra samma uppgift i ett Visual Basic-projekt där Alternativet strikt är aktiverat.

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