Bagikan melalui


Pengikatan terlambat di solusi Office

Beberapa jenis dalam model objek aplikasi Office likasi menyediakan fungsionalitas yang tersedia melalui fitur pengikatan terlambat. Misalnya, beberapa metode dan properti dapat mengembalikan berbagai jenis objek tergantung pada konteks aplikasi Office likasi, dan beberapa jenis dapat mengekspos metode atau properti yang berbeda dalam konteks yang berbeda.

Berlaku untuk: Informasi dalam topik ini berlaku untuk proyek tingkat dokumen dan proyek Add-in VSTO. Lihat Fitur yang tersedia berdasarkan aplikasi Office likasi dan jenis proyek.

Proyek Visual Basic di mana Opsi Strict nonaktif dan proyek Visual C# yang menargetkan .NET Framework 4 atau .NET Framework 4.5 dapat bekerja langsung dengan jenis yang menggunakan fitur pengikatan terlambat ini.

Transmisi implisit dan eksplisit dari nilai pengembalian objek

Banyak metode dan properti di rakitan interop utama (PIAs) Microsoft Office mengembalikan Object nilai, karena dapat mengembalikan beberapa jenis objek yang berbeda. Misalnya, ActiveSheet properti mengembalikan Object karena nilai pengembaliannya bisa menjadi Worksheet objek atau Chart , tergantung pada apa lembar aktifnya.

Saat metode atau properti mengembalikan Object, Anda harus secara eksplisit mengonversi (di Visual Basic) objek ke jenis yang benar dalam proyek Visual Basic tempat Opsi Ketat berada. Anda tidak perlu secara eksplisit melemparkan Object nilai yang dikembalikan dalam proyek Visual Basic di mana Opsi Ketat nonaktif.

Dalam kebanyakan kasus, dokumentasi referensi mencantumkan jenis nilai pengembalian yang mungkin untuk anggota yang mengembalikan Object. Mengonversi atau mentransmisikan objek memungkinkan IntelliSense untuk objek di Editor Kode.

Untuk informasi tentang konversi di Visual Basic, lihat Fungsi konversi implisit dan eksplisit (Visual Basic) dan CType (Visual Basic).

Contoh

Contoh kode berikut menunjukkan cara melemparkan objek ke jenis tertentu dalam proyek Visual Basic tempat Opsi Strict berada. Dalam jenis proyek ini, Anda harus secara eksplisit melemparkan Cells properti ke Range. Contoh ini memerlukan proyek Excel tingkat dokumen dengan kelas lembar kerja bernama Sheet1.

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

Contoh kode berikut menunjukkan cara secara implisit mentransmisikan objek ke jenis tertentu dalam proyek Visual Basic di mana Opsi Ketat nonaktif atau dalam proyek Visual C# yang menargetkan .NET Framework 4. Dalam jenis proyek ini, Cells properti secara implisit dilemparkan ke Range. Contoh ini memerlukan proyek Excel tingkat dokumen dengan kelas lembar kerja bernama Sheet1.

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

Mengakses anggota yang hanya tersedia melalui pengikatan terlambat

Beberapa properti dan metode di PIA Office hanya tersedia melalui pengikatan yang terlambat. Dalam proyek Visual Basic di mana Opsi Strict nonaktif atau dalam proyek Visual C# yang menargetkan .NET Framework 4 atau .NET Framework 4.5, Anda dapat menggunakan fitur pengikatan terlambat dalam bahasa ini untuk mengakses anggota yang terlambat terikat. Di proyek Visual Basic tempat Opsi Strict aktif, Anda harus menggunakan refleksi untuk mengakses anggota ini.

Contoh

Contoh kode berikut menunjukkan cara mengakses anggota yang terlambat terikat dalam proyek Visual Basic di mana Opsi Strict nonaktif atau dalam proyek Visual C# yang menargetkan .NET Framework 4. Contoh ini mengakses properti Nama yang terlambat terikat dari kotak dialog Buka File di Word. Untuk menggunakan contoh ini, jalankan dari ThisDocument kelas atau ThisAddIn dalam proyek Word.

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

Contoh kode berikut menunjukkan cara menggunakan pantulan untuk menyelesaikan tugas yang sama dalam proyek Visual Basic tempat Opsi Ketat berada.

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