Reflection을 사용하여 C#에서 개인 읽기 전용 필드 수정
C#의 private readonly
필드는 개체 초기화 후 수정을 방지하도록 설계되었지만 리플렉션은 이러한 제한을 우회하는 메커니즘을 제공합니다. 이는 readonly
키워드에도 불구하고 생성자가 완료된 후 이러한 필드의 값이 변경될 수 있음을 의미합니다.
예를 들어 설명하겠습니다.
<code class="language-csharp">public class Foo { private readonly int bar; public Foo(int num) { bar = num; } public int GetBar() { return bar; } }</code>
여기 Foo
에는 private readonly int bar
이 포함되어 있습니다. 리플렉션을 사용하여 bar
을 수정할 수 있습니다:
<code class="language-csharp">Foo foo = new Foo(123); typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
이 코드 조각은 리플렉션을 사용하여 비공개 bar
필드에 액세스하고 해당 값을 567로 설정합니다. 이는 readonly
액세스와 함께 private
수정자가 리플렉션을 사용할 때 절대 불변성을 보장하지 않음을 보여줍니다. . 예상치 못한 문제를 방지하고 코드 무결성을 유지하려면 이 동작을 이해하는 것이 중요합니다.
위 내용은 C#에서 리플렉션이 프라이빗 읽기 전용 필드 불변성을 우회할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!