Rumah > pembangunan bahagian belakang > C++ > Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?

Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?

Susan Sarandon
Lepaskan: 2025-01-17 18:04:14
asal
871 orang telah melayarinya

Can Reflection Bypass Private Readonly Field Immutability in C#?

Mengubah suai Medan Baca Sahaja dalam C# Menggunakan Refleksi

Walaupun medan private readonly dalam C# direka untuk mengelakkan pengubahsuaian selepas pemulaan objek, refleksi menyediakan mekanisme untuk memintas sekatan ini. Ini bermakna, walaupun kata kunci readonly, nilai medan ini boleh ditukar selepas pembina selesai.

Mari kita gambarkan ini dengan contoh:

<code class="language-csharp">public class Foo
{
    private readonly int bar;

    public Foo(int num)
    {
        bar = num;
    }

    public int GetBar()
    {
        return bar;
    }
}</code>
Salin selepas log masuk

Di sini, Foo mengandungi private readonly int bar. Kita boleh mengubah suai bar menggunakan refleksi:

<code class="language-csharp">Foo foo = new Foo(123);
typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
Salin selepas log masuk

Coretan kod ini menggunakan pantulan untuk mengakses medan bar peribadi dan menetapkan nilainya kepada 567. Ini menunjukkan bahawa pengubah suai readonly, bersama-sama dengan akses private, tidak menjamin kebolehubahan mutlak apabila pantulan digunakan . Adalah penting untuk memahami tingkah laku ini untuk mengelakkan isu yang tidak dijangka dan mengekalkan integriti kod.

Atas ialah kandungan terperinci Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?. 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