2013-08-20 2 views
2

TypeBuilder를 사용하여 파생 클래스의 기본 클래스에서 전용 메서드를 호출하는 방법을 찾고 있습니다. 리플렉션을 통해이 메소드를 호출하는 것만으로도이 작업을 수행 할 수 있지만 typebuilder로 생성 된 패스 스루 메소드를 호출하면 MethodAccessException이 발생합니다. 누구든지이 문제를 해결할 방법을 찾았습니까?BaseClass에서 Reflection.Emit을 사용하여 파생 클래스에서 private 메서드 호출

답변

4

"문제"가 없습니다. 개인 방법을 호출 할 수 없으므로 개인적인 방법입니다. 적법한 신뢰를 얻었을 때 성찰을 통해 그렇게 할 수 있다는 사실은 효과적으로 백도어가 아니라 다른 방법으로해야 할 일이라는 표시입니다.

에 모두이 가능한 경우 개인 방법을 호출하지 않으려면 다시 디자인해야합니다. 만약 당신이 절대적으로 을 가지고 있다면, 리플렉션을 사용하십시오 - 그 것이 못생긴 것은 당신이 추한 상황에 있다는 것을 나타냅니다.

+1

이 아이디어는 즉시 재 설계 할 필요없이 단위 테스트에서 레거시 코드를 신속하게 가져올 필요가 있음을 나타냅니다. 나는이 기능이 캡슐화를 깨뜨리고 그것을 문제로 언급하지 않는다는 것을 잘 알고 있으며, 가능하다면 나는 단지 궁금하다. – dSquared

+1

@dSquared : 테스트 용이라면 (기존 코드가 사용자가 제어 할 수 있음) 필자는 내부적으로 (보통 개인이 될 것이라는 표시가있는) 메소드를 만든 다음 'InternalsVisibleTo'를 사용하여 테스트 어셈블리에서. –

+1

그 방법을 보호 (테스트 클래스에서 파생 및 호출)하는 것은 내가 자주 사용하는 두 가지 솔루션이며 매우 잘 작동하는 것 같습니다. 나는 단지 테스트를 수용하기 위해 액세스 변경자를 변경하는 방법을 찾고 있었다고 생각합니다. – dSquared

관련 문제