Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Statik pada Kelas yang Diberikan Namanya sebagai Rentetan?

Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Statik pada Kelas yang Diberikan Namanya sebagai Rentetan?

Linda Hamilton
Lepaskan: 2025-01-14 11:18:43
asal
752 orang telah melayarinya

How Can I Use Reflection in C# to Invoke a Static Method on a Class Given Its Name as a String?

Mengakses dan Menggunakan Kaedah C# Statik Secara Dinamik melalui Refleksi

Bayangkan anda mempunyai nama kelas yang disimpan sebagai rentetan (cth., "MyClass") dan perlu memanggil salah satu kaedah statiknya. Refleksi menyediakan mekanisme untuk mencapai tingkah laku dinamik ini. Panduan ini menunjukkan cara menggunakan refleksi untuk mendapatkan semula rujukan kelas daripada nama rentetannya dan seterusnya menggunakan kaedah statik.

Menggunakan Type.GetType untuk Pengambilan Kelas

Kaedah Type.GetType ialah kunci untuk mengakses kelas secara dinamik. Ia mengambil nama kelas yang layak sepenuhnya sebagai rentetan dan mengembalikan objek Type yang mewakili kelas itu:

<code class="language-csharp">Type classType = Type.GetType("MyClass"); </code>
Salin selepas log masuk

Kaedah Invokasi Menggunakan Refleksi

Sebaik sahaja anda mempunyai objek Type, anda boleh menggunakan GetMethod untuk mendapatkan objek MethodInfo yang mewakili kaedah statik yang anda ingin gunakan:

<code class="language-csharp">MethodInfo methodInfo = classType.GetMethod("MyStaticMethod", BindingFlags.Static | BindingFlags.Public);</code>
Salin selepas log masuk

Ini mendapatkan semula kaedah yang dinamakan "MyStaticMethod," memastikan kaedah tersebut adalah kaedah statik awam. BindingFlags menyatakan kriteria carian.

Akhir sekali, gunakan kaedah menggunakan Invoke:

<code class="language-csharp">methodInfo.Invoke(null, null); // null for static method, null for no parameters</code>
Salin selepas log masuk

Untuk kaedah dengan parameter, hantarkan tatasusunan objek sebagai argumen kedua kepada Invoke.

Pertimbangan Penting:

  • Pemuatan Perhimpunan: Pastikan himpunan yang mengandungi kelas dimuatkan ke dalam domain aplikasi.
  • Pengendalian Ralat: Balut panggilan pantulan dalam try-catch blok untuk mengendalikan kemungkinan pengecualian (cth., TypeLoadException, MethodNotFoundException).
  • Pengubah Suai Akses: Hormati pengubah suai akses (awam, peribadi, dll.) kelas dan kaedahnya. Anda mungkin perlu melaraskan BindingFlags dengan sewajarnya.

Dengan menggunakan teknik ini, anda boleh membuka kunci kuasa seruan kaedah dinamik dalam C#, membolehkan aplikasi yang fleksibel dan boleh disesuaikan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Statik pada Kelas yang Diberikan Namanya sebagai Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan