首頁 > 後端開發 > C++ > 反射可以修改C#的私有唯讀欄位嗎?

反射可以修改C#的私有唯讀欄位嗎?

Patricia Arquette
發布: 2025-01-17 18:16:09
原創
680 人瀏覽過

Can Reflection Modify C#'s Private Readonly Fields?

在 C# 中使用反射修改私有唯讀欄位

C# 中的反射提供了強大的功能,包括操作私有唯讀欄位的能力。 讓我們檢查一下在創建物件後是否可以更改私有唯讀欄位。

考慮這個例子:

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

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

    public int GetBar()
    {
        return bar;
    }
}

Foo foo = new Foo(123);
Console.WriteLine(foo.GetBar()); // Outputs 123</code>
登入後複製

用反射修改場

現在,讓我們使用反射來更改 bar 欄位:

<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
登入後複製

此程式碼片段使用反射來存取私有 bar 欄位並將其值設為 567。

結果

經過這次反射操作,bar的數值確實改變了:

<code class="language-csharp">Console.WriteLine(foo.GetBar()); // Outputs 567</code>
登入後複製

這表明,儘管聲明了private readonly,但反射允許在物件創建後修改欄位的值。 雖然這是可能的,但通常被認為是不好的做法,除非由於潛在的不可預見的後果和可維護性問題而絕對必要,否則應該避免。

以上是反射可以修改C#的私有唯讀欄位嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板