Menggunakan Kaedah Statik dengan Refleksi
Masalah:
Anda mempunyai beberapa kelas statik dalam namespace mySolution.Macros, setiap satu mengandungi kaedah statik seperti:
public static class Indent { public static void Run() { // implementation } }
Objektif anda adalah untuk menggunakan kaedah ini menggunakan pantulan, walaupun ia adalah statik.
Penyelesaian:
Untuk menggunakan statik kaedah dengan refleksi sambil mengekalkan sifat statiknya, gunakan pendekatan berikut:
foreach (var tempClass in macroClasses) { // Note that the first argument is ignored for static methods tempClass.GetMethod("Run").Invoke(null, null); }
Seperti yang dinyatakan dalam dokumentasi untuk MethodInfo.Invoke, hujah pertama adalah berlebihan untuk kaedah statik, jadi anda boleh lulus null dengan selamat.
Bendera Mengikat:
Adalah penting untuk ambil perhatian bahawa anda mungkin perlu menentukan bendera mengikat apabila menggunakan kaedah, seperti yang dicadangkan dalam ulasan:
tempClass.GetMethod("Run", BindingFlags.Public | BindingFlags.Static).Invoke(null, null);
Ini memastikan bahawa kaedah tersebut adalah awam dan statik, yang diperlukan untuk penyerahan yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Kaedah Statik Menggunakan Refleksi dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!