아직 제대로 아는거 같지도 않고.
응용도 못하겠지만.
reflection이라는건 참으로 유용한거 같네요.
이전에 실버라이트쪽에서 reflection으로 페이지 호출하는거 포스팅도 했었는데.
이번엔 간단한 method reflection 예제입니다.

아주 간단한데.
이게 잘 쓰면 코드량을 상당히 줄여줄꺼 같네요...
(이러라고 쓰는게 맞는건 아닌거 같지만. ㅋ)


MethodInfo method = (메소드를 가지고 있는 인스턴스?)GetType().GetMethod("메소드명");
method.Invoke((호출할 인스턴스), (파라미터));

이런식으로 쓰면 됩니다.

만약에 GetMethod에 넣은 메소드명이. 존재하지 않는 메소드라고 하면
method는 null이 되므로
method.Invoke를 호출하기 전에 null 체크를 해주는게 좋겠죠?

그리고
도움말에 나오지만
Invoke의 첫번째 파라미터는 static method의 경우는 무시되고
두번째 파라미터는 Object[] 형식이고
파라미터가 없는 메소드의 경우에는 null입니다.

*추가 주의사항
  전혀 모르고 있다가 MSDN찾아보고 알게된게 있네요..
 GetMethod로 메소드를 찾을때 해당 메소드는 public이여야 합니다... ㅠㅠ 몰라서 한참 헤맸네요. ㅠㅠ
by 피요히코~ 2010. 4. 29. 15:15
| 1 |