Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas MethodBuilder ini digunakan untuk sepenuhnya menggambarkan metode dalam bahasa perantara umum (CIL), termasuk nama, atribut, tanda tangan, dan isi metode. Ini digunakan dalam hubungannya dengan kelas TypeBuilder untuk membuat kelas saat runtime.
Anda dapat menggunakan Reflection Emit untuk mendefinisikan method global dan mendefinisikan metode sebagai anggota jenis. API yang mendefinisikan metode akan mengembalikan objek MethodBuilder.
Metode global
Metode global didefinisikan dengan menggunakan ModuleBuilder.DefineGlobalMethod metode , yang mengembalikan MethodBuilder objek.
Metode global harus statis. Jika modul dinamis berisi metode global, ModuleBuilder.CreateGlobalFunctions metode harus dipanggil sebelum mempertahankan modul dinamis atau rakitan dinamis yang berisi karena runtime bahasa umum menunda perbaikan modul dinamis sampai semua fungsi global telah ditentukan.
Metode global asli didefinisikan menggunakan metode ModuleBuilder.DefinePInvokeMethod. Metode Platform Invoke (PInvoke) tidak boleh dinyatakan abstrak atau virtual. Runtime mengatur MethodAttributes.PinvokeImpl atribut untuk metode pemanggilan platform.
Metode sebagai anggota tipe
Metode didefinisikan sebagai anggota jenis dengan menggunakan TypeBuilder.DefineMethod metode , yang mengembalikan MethodBuilder objek.
Metode DefineParameter ini digunakan untuk mengatur atribut nama dan parameter parameter, atau nilai yang dikembalikan. Objek ParameterBuilder yang dikembalikan oleh metode ini mewakili parameter atau nilai yang dikembalikan. Objek ParameterBuilder dapat digunakan untuk mengatur marshaling, untuk mengatur nilai konstanta, dan untuk menerapkan atribut kustom.
Atributs
Anggota MethodAttributes enumerasi menentukan karakter yang tepat dari metode dinamis:
- Metode statis ditentukan menggunakan MethodAttributes.Static atribut .
- Metode final (metode yang tidak dapat ditimpa) ditentukan menggunakan atribut MethodAttributes.Final.
- Metode virtual ditentukan menggunakan MethodAttributes.Virtual atribut .
- Metode abstrak ditentukan menggunakan MethodAttributes.Abstract atribut .
- Beberapa atribut menentukan visibilitas metode. Lihat deskripsi MethodAttributes enumerasi.
- Metode yang menerapkan operator yang kelebihan beban harus mengatur MethodAttributes.SpecialName atribut .
- Finalizer harus mengatur MethodAttributes.SpecialName atribut .
Masalah yang diketahui
- Meskipun MethodBuilder berasal dari MethodInfo, beberapa metode abstrak yang ditentukan dalam MethodInfo kelas tidak sepenuhnya diimplementasikan dalam MethodBuilder. Metode MethodBuilder ini melempar NotSupportedException. Misalnya MethodBuilder.Invoke metode tidak sepenuhnya diimplementasikan. Anda dapat merefleksikan metode ini dengan mengambil jenis penutup menggunakan Type.GetType metode atau Assembly.GetType .
- Pengubah kustom didukung.