실제로 버그라고 생각했던 것은 This post에 묘사 된 기능입니다. 아무도 왜 이것이 허용되는지 설명 할 수 있습니까? 그것은 유용하게 된 유산 버크/버그처럼 보입니다.개인 설정 도구를 사용하여 속성에 SetValue에 반사 기능을 사용했습니다.
2
A
답변
6
당신은 버그라고 생각하는 부분이 확실하지 않지만, 컴파일 할 때 반성을 통해 클래스의 내부에 액세스하는 것은 항상 가능했습니다. 이는 의도적으로 설계된 동작입니다. CLR의 여러 측면은 직렬화와 같은 필드 액세스에 대한 리플렉션에 의존합니다. 컴파일 된 IL은 모든 개체의 모든 필드에 액세스 할 수 있어야합니다. 그렇지 않으면 개인 필드를 에서 범위 내로 설정할 수 없습니다.
C#의 액세스 한정자는 보안 메커니즘이 아닙니다. 누군가가 외부에서 그것을 설정하는 것을 막기 위해 사적인 영역에 의존한다면, 당신은 잘못된 행동을하고있는 것입니다. 클래스의 어느 부분이 구현 세부 사항 (및 따라서 예고없이 변경 될 수있는 공개 계약 (따라서 이론적으로 안정))인지 명확하게 설명합니다.
리플렉션을 사용하도록 선택하면 객체의 내부 상태를 변경하십시오. 모든 징후가 있지만 혼자 남겨 두어야합니다. 응용 프로그램의 안정성을 자신의 손안에 가져 가면 어떤 대가를 치를 수 있습니다.
0
리플렉션은 완전 신뢰 코드에만 허용되므로 코드에서 이미 아무 것도 할 수 있습니다 (프로세스의 메모리에 직접 파고 들기 포함). 따라서 사유 재산에 대해서도 값을 변경하는 방법을 지원한다고해서 코드의 안전성이 떨어지는 것은 아닙니다. 리플렉션 API를 일관되게 만들고 특히 테스트를위한 유용한 시나리오를 제공합니다.
관련 문제
- 1. 개인 설정 도구를 사용하는 AutoMapper 매핑 속성
- 2. 액세스 개인 개체 사용하여 자바 반사 API를
- 3. 개인 속성에 대한 개인 변수의 액세스/설정 액세스
- 4. # 1111 - 그룹 기능을 잘못 사용했습니다.
- 5. android sdk 도구를 사용하여 개인 키 서명
- 6. 개체 초기화 도구를 사용하여 전용 설정 도구 설정
- 7. 반사 - 설정 반환되는 객체 유형?
- 8. PHP에서 개인 속성에 액세스하려면 어떻게해야합니까?
- 9. SetValue에 대한 리플렉션 대신 CreateDelegate
- 10. 반사 설정 메소드가 작동하지 않습니다.
- 11. 안드로이드 : 개인 정적 최종 필드 사용하여 자바 반사
- 12. Automapper 설정 파일 및 반사
- 13. 개인 기능을 호출하려면 어떻게해야합니까?
- 14. 속성의 속성에 기능을 추가하십시오.
- 15. 반사
- 16. aspnet 개인 설정
- 17. Google지도 배지 개인 설정
- 18. gitolite를 사용하여 개인 분기 권한 설정
- 19. Linqpad에서 사용하는 반사 도구를 교체 할 수 있습니까?
- 20. 개인 프록시 도구를 만드는 방법을 배워야합니까?
- 21. 반사
- 22. codeigniter가 cli에서 개인 기능을 호출합니다.
- 23. EUnit에서 개인 기능을 테스트하지 못했습니다.
- 24. 개인 정수를 다른 개인 정수로 설정
- 25. 나만의 개인 OpenID 설정
- 26. 반사
- 27. 도구를 사용하여 PHP 코드를
- 28. 반사
- 29. f # 대화 형을 사용하여 개인 필드/메서드/속성에 액세스하는 방법
- 30. java reflection을 사용하여 MainActivity 클래스에서 개인 속성에 액세스 - 필드
보안 메커니즘이 확실하지 않습니다. 부분적으로 신뢰할 수있는 코드가 다른 유형의 비공개 멤버에 액세스 할 수없는 이유가 있습니다. – svick
좋은 대답은 .... – MarkP