Bagikan melalui


DynamicMethod.Invoke Metode

Definisi

Memanggil metode dinamis menggunakan parameter yang ditentukan, di bawah batasan pengikat yang ditentukan, dengan informasi budaya yang ditentukan.

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object? Invoke (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture);
public override object Invoke (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

Parameter

obj
Object

Parameter ini diabaikan untuk metode dinamis, karena bersifat statis. Tentukan null.

invokeAttr
BindingFlags

Kombinasi BindingFlags nilai bitwise.

binder
Binder

Objek Binder yang memungkinkan pengikatan, paksaan jenis argumen, pemanggilan anggota, dan pengambilan MemberInfo objek melalui pantulan. Jika binder adalah null, pengikat default digunakan. Untuk detail selengkapnya, lihat Binder.

parameters
Object[]

Daftar argumen. Ini adalah array argumen dengan angka, urutan, dan jenis yang sama dengan parameter metode yang akan dipanggil. Jika tidak ada parameter, parameter ini harus null.

culture
CultureInfo

Instans yang CultureInfo digunakan untuk mengatur koersi jenis. Jika ini adalah null, CultureInfo untuk utas saat ini digunakan. Misalnya, informasi ini diperlukan untuk mengonversi String dengan benar yang mewakili 1000 menjadi Double nilai, karena 1000 diwakili secara berbeda oleh budaya yang berbeda.

Mengembalikan

yang Object berisi nilai pengembalian dari metode yang dipanggil.

Pengecualian

Konvensi VarArgs panggilan tidak didukung.

Jumlah elemen di parameters tidak cocok dengan jumlah parameter dalam metode dinamis.

Jenis satu atau beberapa elemen parameters tidak cocok dengan jenis parameter yang sesuai dari metode dinamis.

Metode dinamis dikaitkan dengan modul, tidak dihosting secara anonim, dan dibangun dengan skipVisibility diatur ke false, tetapi metode dinamis mengakses anggota yang tidak public atau internal (Friend di Visual Basic).

-atau-

Metode dinamis dihosting secara anonim dan dibangun dengan skipVisibility diatur ke false, tetapi mengakses anggota yang bukan public.

-atau-

Metode dinamis berisi kode yang tidak dapat diverifikasi. Lihat bagian "Verifikasi" di Keterangan untuk DynamicMethod.

Contoh

Contoh kode berikut memanggil metode dinamis dengan pengikatan yang tepat, menggunakan budaya US-English. Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk DynamicMethod kelas .

Console::WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
array<Object^>^ invokeArgs = { "\r\nHello, World!", 42 };
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
Object^ objRet = hello->Invoke(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

Keterangan

Selain pengecualian yang tercantum, kode panggilan harus disiapkan untuk menangkap pengecualian apa pun yang dilemparkan oleh metode dinamis.

Menjalankan metode dinamis dengan delegasi yang dibuat oleh CreateDelegate metode lebih efisien daripada mengeksekusinya dengan Invoke metode .

Memanggil Invoke metode atau CreateDelegate metode menyelesaikan metode dinamis. Setiap upaya lebih lanjut untuk mengubah metode dinamis, seperti memodifikasi definisi parameter atau memancarkan lebih banyak bahasa perantara Microsoft (MSIL), diabaikan; tidak ada pengecualian yang dilemparkan.

Semua metode dinamis bersifat statis, sehingga obj parameter selalu diabaikan. Untuk memperlakukan metode dinamis seolah-olah itu adalah metode instans, gunakan CreateDelegate(Type, Object) kelebihan beban yang mengambil instans objek.

Jika metode dinamis tidak memiliki parameter, nilainya parameters harus null. Jika tidak, jumlah, jenis, dan urutan elemen dalam array parameter harus identik dengan jumlah, jenis, dan urutan parameter metode dinamis.

Catatan

Metode kelebihan beban ini disebut dengan Invoke(Object, Object[]) metode kelebihan beban yang diwarisi dari MethodBase kelas , sehingga keterangan sebelumnya berlaku untuk kedua kelebihan beban.

Metode ini tidak menuntut izin secara langsung, tetapi memanggil metode dinamis dapat mengakibatkan tuntutan keamanan, tergantung pada metode . Misalnya, tidak ada tuntutan yang dibuat untuk metode dinamis yang dihosting secara anonim yang dibuat dengan parameter yang restrictedSkipVisibility diatur ke false. Di sisi lain, jika Anda membuat metode dengan restrictedSkipVisibility diatur ke true sehingga dapat mengakses anggota tersembunyi dari rakitan target, metode akan menyebabkan permintaan untuk izin rakitan target ditambah ReflectionPermission dengan ReflectionPermissionFlag.MemberAccess bendera .

Catatan

Sebelum .NET Framework 2.0, metode ini diperlukan ReflectionPermission dengan MemberAccess bendera .

Berlaku untuk

Lihat juga