2013-06-04 6 views
1

리플렉션을 사용하여 클래스 내에서 메소드를 실행하려고합니다. 방법이 존재 Althoough, 나는 아직도 아마이 방법이 기본 클래스에 위치하고 ExecuteMethod가 자식 클래스에 beingcalled 것을 말할 가치가 그것을 MethodNotFound 예외를리플렉션을 사용하여 메소드를 실행하지 않는 이유는 무엇입니까?

public virtual void ExecuteMethod(string MethodName) 
    { 
     if(this is ISelectable) 
     { 
      Type thisType = (this as ISelectable).GetType(); 
      thisType.InvokeMember(MethodName, BindingFlags.InvokeMethod | BindingFlags.Public , null, null, null); 
     } 
    } 

    public virtual void Add() { } 

을 얻고있다. 나는 그것이 중요하다고 생각하지 않지만 어쨌든. documentation에서

+0

가있는 객체의 인스턴스를 보내십시오 또 다른 방법은 정적 호출하려고하는이 방법인가? – BrunoLM

+0

아니, 아니야 ... – user853710

+1

그러면 호출 메소드를 전달할 인스턴스가 필요하다. – BrunoLM

답변

1

메서드를 실행하려면을 지정하고 실행하려면 개체을 지정하지 않았습니다. 유형에서 뭔가를 확장 할 수는 없으며 구체적인 개체를 지정해야합니다. 이 형식을 사용하여 메서드의 메타 데이터를 가져온 다음 해당 정보를 사용하여 실제 개체에서 메서드를 호출합니다. 자세한 내용은 Check this MSDN page을 참조하십시오.

마지막으로 두 번째로 null이 대상이어야합니다. 아마도 this 일 수 있습니다.

+0

이것이 마지막으로 누락되었습니다 – user853710

+0

@ user853710 - 그냥 호기심에서 벗어나서 왜 내 대답을 취소 했습니까? 나는 당신이 매개 변수 목록에서'this'를 놓치고 있다고 언급했는데, 그것은 나의 대답에 강조되어있다. 아직도, 그것은 당신이 누구의 대답을 받아들이는지 끝났습니다 ... – slugster

+0

미안 친구. 두 번 클릭하거나 사고가 있었음에 틀림 없습니다. – user853710

1

:

당신은 Public 또는 NonPublic 또는 없는 회원들과 함께 Instance 또는 Static를 지정해야이 반환됩니다.

코드에서 귀하의 경우 방법이 static 인 것으로 보이므로 BindingFlags.Static을 추가하십시오.

+0

'FlattenHeirarchy'에서 결합하는 것도 좋은 것은 말할 것도 없다. 그것이 그의 유일한 문제는 아니지만. – slugster

0

MethodInfo _methodinfo= type.GetMethod(MethodName); 
_methodinfo.Invoke(null, null) 
+0

정적 클래스에서 메소드가 호출되고 있다고 가정하고있다. 그렇지 않으면 코드가 실패 할 것이다. – slugster

+0

이 코드는 테스트를 거쳤습니다. C 클래스를 만들고 Test type을 입력하면 type type = typeof (C) 메서드가 포함되어 있습니다. 부정적인 의견을 제시하기 전에 사실을 확인해야합니다. – Bunny

+1

[doco] (http://msdn.microsoft.com/en-us/library/a89hcwhh.aspx)로 안내해 드리겠습니다. Exceptions 섹션의 TargetException. 첫 번째 인수는 ** static ** 클래스로 작업 할 때만 null이 될 수 있습니다. – slugster

1

이 방법

thisType.InvokeMember(MethodName, BindingFlags.InvokeMethod | BindingFlags.Public, null 
    , this // instance of the object which has the method 
    , null); 
관련 문제