>백엔드 개발 >C++ >리플렉션이 C#의 개인 읽기 전용 필드 제한을 우회할 수 있습니까?

리플렉션이 C#의 개인 읽기 전용 필드 제한을 우회할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-17 18:06:09162검색

Can Reflection Bypass C#'s Private Readonly Field Restrictions?

C# 리플렉션을 사용하여 개인 읽기 전용 필드 수정

C#의

private readonly 수정자는 생성자 이후에 필드가 수정되는 것을 방지하도록 설계되었지만 리플렉션을 통해 수정 가능성을 탐색할 수 있습니다.

문제: 리플렉션을 사용하여 개인 읽기 전용 필드 수정

생성자가 실행된 후 리플렉션을 사용하여 비공개 읽기 전용 필드를 변경할 수 있나요?

상세 분석

다음 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()); // 输出 123
// 在此处添加反射代码。
Console.WriteLine(foo.GetBar()); // 输出 456</code>

Reflection을 활용한 솔루션

성찰은 이 목표를 달성할 수 있는 방법을 제공합니다. 방법은 다음과 같습니다.

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

이 코드는 리플렉션을 사용하여 Foo클래스 인스턴스foo의 전용 읽기 전용 필드 "bar"를 수정합니다. readonly는 직접적인 수정을 방지하지만 리플렉션은 이러한 제한을 우회합니다. 이 접근 방식은 캡슐화가 중단되고 코드 유지 관리 및 디버그가 어려워질 수 있으므로 일반적으로 권장되지 않습니다.

위 내용은 리플렉션이 C#의 개인 읽기 전용 필드 제한을 우회할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.