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 중국어 웹사이트의 기타 관련 기사를 참조하세요!