Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Peribadi?

Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Peribadi?

Susan Sarandon
Susan Sarandonasal
2025-01-25 05:32:13819semak imbas

How Can I Use Reflection in C# to Invoke Private Methods?

Mengakses Kaedah Peribadi dengan C# Reflection

Dalam C#, kaedah persendirian biasanya disembunyikan atas sebab pengkapsulan dan keselamatan. Walau bagaimanapun, situasi mungkin timbul di mana panggilan secara dinamik kaedah peribadi ini pada masa jalan menjadi perlu. Di sinilah kuasa pantulan berperanan.

Panggilan

Standard GetMethod() hanya mendapatkan semula kaedah awam, dilindungi dan dalaman. Untuk mengakses kaedah persendirian, anda mesti menggunakan versi terlampau beban GetMethod() dan nyatakan BindingFlags yang betul.

Penyelesaian:

Kuncinya ialah menggunakan BindingFlags yang sesuai dalam panggilan GetMethod(). Begini caranya:

<code class="language-csharp">MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType, 
    BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, new object[] { methodParams });</code>

Coretan kod ini mendapatkan semula kaedah peribadi (dinamakan secara dinamik menggunakan "Draw_" itemType) dan kemudian memanggilnya menggunakan dynMethod.Invoke().

Memahami BindingFlags:

Penghitungan BindingFlags mengawal ahli mana yang disertakan dalam carian. Untuk permohonan kaedah persendirian, BindingFlags.NonPublic dan BindingFlags.Instance adalah penting:

  • BindingFlags.NonPublic: Bendera ini termasuk ahli bukan awam (swasta dan dilindungi).
  • BindingFlags.Instance: Bendera ini mengehadkan carian kepada kaedah contoh, tidak termasuk kaedah statik.

Lagi mengenai BindingFlags:

Untuk maklumat terperinci tentang BindingFlags penghitungan dan pelbagai pilihannya, rujuk dokumentasi rasmi Microsoft [masukkan URL dokumentasi di sini].

Pendekatan ini membolehkan pembangun memanggil kaedah peribadi secara dinamik dari dalam contoh kelas yang sama, membuka kemungkinan untuk manipulasi masa jalan lanjutan ahli kelas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Refleksi dalam C# untuk Mendapat Kaedah Peribadi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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