Condividi tramite


Associazione tardiva nelle soluzioni Office

Alcuni tipi nei modelli a oggetti delle app Office licazioni forniscono funzionalità disponibili tramite funzionalità di associazione tardiva. Ad esempio, alcuni metodi e proprietà possono restituire tipi diversi di oggetti a seconda del contesto della app Office lication e alcuni tipi possono esporre metodi o proprietà diversi in contesti diversi.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento e ai progetti di componente aggiuntivo VSTO. Vedere Funzionalità disponibili per app Office lication e tipo di progetto.

I progetti Visual Basic in cui Option Strict è disattivato e i progetti Visual C# destinati a .NET Framework 4 o .NET Framework 4.5 possono funzionare direttamente con i tipi che usano queste funzionalità di associazione tardiva.

Cast implicito ed esplicito dei valori restituiti dall'oggetto

Molti metodi e proprietà negli assembly di interoperabilità primari di Microsoft Office restituiscono Object valori, perché possono restituire diversi tipi di oggetti. Ad esempio, la ActiveSheet proprietà restituisce un oggetto Object perché il relativo valore restituito può essere un Worksheet oggetto o Chart , a seconda del foglio attivo.

Quando un metodo o una proprietà restituisce un oggetto Object, è necessario convertire in modo esplicito (in Visual Basic) l'oggetto nel tipo corretto nei progetti Visual Basic in cui Option Strict è attivo. Non è necessario eseguire il cast Object esplicito dei valori restituiti nei progetti Visual Basic in cui Option Strict è disattivato.

Nella maggior parte dei casi, la documentazione di riferimento elenca i possibili tipi del valore restituito per un membro che restituisce un oggetto Object. La conversione o il cast dell'oggetto abilita IntelliSense per l'oggetto nell'editor di codice.

Per informazioni sulla conversione in Visual Basic, vedere Conversioni implicite ed esplicite (Visual Basic) e funzione CType (Visual Basic).

Esempi

Nell'esempio di codice seguente viene illustrato come eseguire il cast di un oggetto a un tipo specifico in un progetto di Visual Basic in cui Option Strict è attivo. In questo tipo di progetto, è necessario eseguire il cast esplicito della Cells proprietà a un oggetto Range. Questo esempio richiede un progetto Excel a livello di documento con una classe del foglio di lavoro denominata Sheet1.

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

Nell'esempio di codice seguente viene illustrato come eseguire il cast implicito di un oggetto a un tipo specifico in un progetto di Visual Basic in cui Option Strict è disattivato o in un progetto Visual C# destinato a .NET Framework 4. In questi tipi di progetti, la Cells proprietà viene eseguito in modo implicito a un oggetto Range. Questo esempio richiede un progetto Excel a livello di documento con una classe del foglio di lavoro denominata Sheet1.

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

Accedere ai membri disponibili solo tramite associazione tardiva

Alcune proprietà e metodi nei piA di Office sono disponibili solo tramite associazione tardiva. Nei progetti Visual Basic in cui Option Strict è disattivato o nei progetti Visual C# destinati a .NET Framework 4 o .NET Framework 4.5, è possibile usare le funzionalità di associazione tardiva in questi linguaggi per accedere ai membri con associazione tardiva. Nei progetti di Visual Basic in cui Option Strict è attivo, è necessario usare la reflection per accedere a questi membri.

Esempi

Nell'esempio di codice seguente viene illustrato come accedere ai membri con associazione tardiva in un progetto di Visual Basic in cui Option Strict è disattivato o in un progetto Visual C# destinato a .NET Framework 4. In questo esempio si accede alla proprietà Name ad associazione tardiva della finestra di dialogo Apri file in Word. Per usare questo esempio, eseguirlo dalla ThisDocument classe o ThisAddIn in un progetto di Word.

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

Nell'esempio di codice seguente viene illustrato come usare la reflection per eseguire la stessa attività in un progetto di Visual Basic in cui Option Strict è attivo.

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