DynamicMethod.Invoke Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 .