Sdílet prostřednictvím


Pozdní vazby v řešeních Office

Některé typy v objektových modelech aplikace Office lications poskytují funkce, které jsou k dispozici prostřednictvím funkcí pozdní vazby. Některé metody a vlastnosti můžou například v závislosti na kontextu aplikace Office licace vracet různé typy objektů a některé typy můžou v různých kontextech vystavit různé metody nebo vlastnosti.

Platí pro: Informace v tomto tématu platí pro projekty na úrovni dokumentu a projekty doplňků VSTO. Viz Funkce dostupné podle typu aplikace Office lication a projektu.

Projekty jazyka Visual Basic, ve kterých je možnost Strict vypnutá, a projekty Visual C#, které cílí na rozhraní .NET Framework 4 nebo .NET Framework 4.5, můžou pracovat přímo s typy, které využívají tyto funkce pozdní vazby.

Implicitní a explicitní přetypování vrácených hodnot objektu

Mnoho metod a vlastností v systém Microsoft Office primárních sestavení vzájemné spolupráce (PIA) vrací Object hodnoty, protože mohou vrátit několik různých typů objektů. ActiveSheet Například vlastnost vrací, protože její návratová Object hodnota může být Worksheet nebo Chart objekt v závislosti na tom, co je aktivní list.

Pokud metoda nebo vlastnost vrací Object, musíte explicitně převést (v jazyce Visual Basic) objekt na správný typ v projektech Jazyka Visual Basic, kde Option Strict je zapnuta. V projektech Visual Basicu, kde je možnost Strict vypnutá, nemusíte explicitně přetypovat Object návratové hodnoty.

Ve většině případů referenční dokumentace uvádí možné typy návratové hodnoty pro člena, který vrací hodnotu Object. Převod nebo přetypování objektu umožňuje technologii IntelliSense pro objekt v Editoru kódu.

Informace o převodu v jazyce Visual Basic naleznete v tématu Implicitní a explicitní převody (Visual Basic) a funkce CType (Visual Basic).

Příklady

Následující příklad kódu ukazuje, jak přetypovat objekt na určitý typ v projektu jazyka Visual Basic, kde Option Strict je zapnuta. V tomto typu projektu je nutné explicitně přetypovat Cells vlastnost na .Range Tento příklad vyžaduje projekt aplikace Excel na úrovni dokumentu s třídou listu s názvem Sheet1.

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

Následující příklad kódu ukazuje, jak implicitně přetypovat objekt na konkrétní typ v projektu Jazyka Visual Basic, kde Option Strict je vypnut nebo v projektu Visual C#, který cílí na rozhraní .NET Framework 4. V těchto typech projektů Cells je vlastnost implicitně přetypována na .Range Tento příklad vyžaduje projekt aplikace Excel na úrovni dokumentu s třídou listu s názvem Sheet1.

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

Přístupové členy, které jsou k dispozici pouze prostřednictvím pozdní vazby

Některé vlastnosti a metody v pia Office jsou k dispozici pouze prostřednictvím pozdní vazby. V projektech jazyka Visual Basic, kde je možnost Strict vypnutá nebo v projektech Visual C#, které cílí na rozhraní .NET Framework 4 nebo .NET Framework 4.5, můžete použít funkce pozdní vazby v těchto jazycích pro přístup ke členům s pozdní vazbou. V projektech jazyka Visual Basic, kde je zapnutá možnost Strict , je nutné použít reflexi pro přístup k těmto členům.

Příklady

Následující příklad kódu ukazuje, jak získat přístup ke členům s pozdní vazbou v projektu jazyka Visual Basic, kde option Strict je vypnutý nebo v projektu Visual C#, který cílí na rozhraní .NET Framework 4. Tento příklad přistupuje k vlastnosti Late-bound Name dialogového okna Otevřít soubor ve Wordu. Pokud chcete tento příklad použít, spusťte ho z projektu wordu ThisDocument nebo ThisAddIn třídy.

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

Následující příklad kódu ukazuje, jak použít reflexi k provedení stejného úkolu v projektu jazyka Visual Basic, kde Option Strict je zapnuta.

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