Mengakses Ahli Persendirian melalui Refleksi .NET
Dalam situasi tertentu, menggunakan refleksi untuk mengakses medan peribadi dalam objek .NET terbukti bermanfaat. Panduan ini menggambarkan cara untuk mendapatkan semula medan peribadi _bar
daripada kelas menggunakan refleksi, walaupun pengubah suai akses peribadinya.
Mengambil semula Medan dengan Refleksi
API Refleksi .NET menawarkan kaedah GetFields()
, mengembalikan tatasusunan FieldInfo
objek untuk jenis tertentu. Secara lalai, hanya medan awam dikembalikan. Untuk mengakses medan peribadi, kami mesti menentukan bendera mengikat yang sesuai.
Memahami Bendera Pengikat
Ikatan bendera mengawal ahli mana yang disertakan dalam operasi pantulan. Untuk akses medan peribadi, kami memerlukan:
BindingFlags.NonPublic
: Termasuk ahli bukan awam (swasta, dalaman, dilindungi).BindingFlags.Instance
: Termasuk medan contoh (berbanding dengan medan statik).Contoh Kod: Mengakses Medan Peribadi
Untuk mengakses medan _bar
peribadi kelas Foo
:
<code class="language-csharp">Type myType = typeof(Foo); FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields) { // Example: Check for a custom attribute if (field.IsDefined(typeof(SomeAttribute), false)) { Console.WriteLine($"Found private field: {field.Name}"); } }</code>
Nota Penting: Semakan atribut adalah untuk demonstrasi. Refleksi membolehkan mendapatkan semula semua maklumat medan (jenis, nilai, pengubah suai, dsb.). Ingat bahawa mengakses ahli persendirian secara langsung boleh memecahkan enkapsulasi dan harus digunakan dengan berhati-hati.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Medan Peribadi Menggunakan Refleksi dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!