지난번에 포스팅 했던 reflection을 사용하다가.
또 알아낸게 있어서 두번째로 다시 포스팅 합니다. ㅋ

메소드를 읽어올때
그냥 메소드 명만 써주면 기본적으로 public 메소드만 가지고 와 집니다.
(전 그래서 메소드를 다 public으로 바꿨.....)

근데 이게
GetMethod에 두번째 파라미터가 있는데. (있는건 알았지만 몰라서 안썼...)
BindingFlags 를 정해주는게 있습니다.
(자세한 내용은 MSDN)

이 파라미터를 지정해 주면
(MSDN말처럼)리플렉션에서 멤버 및 형식 검색이 수행되는 방식과 바인딩을 제어하는 플래그를 지정해 줄수 있습니다.

이렇게 하면 private 메소드도 가져올수 있죠.

그래서 테스트를 해봤습니다.


this.GetType().GetMethod("LF_Save" + tab_Now.Name, BindingFlags.NonPublic);

근데 이렇게 했더니
MethodInfo 가 계속 null이 되더라구요

왜그런가 싶어서 메소드를 다시 public으로 바꾸고
BindingFlags를 Public으로 줘봤는데도...
null... :(

이곳저곳 막 뒤져봤는데 이유를 못찾겠더라구요....

근데역시나..
MSDN을 제대로 안본탓...
MSDN에 이런말이 있더라구요...
Instance 또는 StaticPublic 또는 NonPublic과 함께 지정해야 합니다. 그렇지 않으면 멤버가 반환되지 않습니다.

쿠쿵.. ㅠㅠ

그래서



this.GetType().GetMethod("LF_Save" + tab_Now.Name, BindingFlags.NonPublic | BindingFlags.Instance);

이렇게 하니 잘 되네요... ㅠㅠ
아.....
아......
역시.. 할라면 제대로 하라고..
MSDN을 보려면 제대로 봐야 하네요.....

그래도 하려던게 잘 되서 다행입니다. ㅠㅠ
by 피요히코~ 2010. 5. 7. 11:38
| 1 |