2012-12-14 2 views
0

다른 메소드에서 메소드를 지정할 수 있기를 원합니다.다른 메소드로 메소드 전달하기

내가 할 수 있도록

public class Binder 
{ 
    public void Bind(whatShouldIWriteHere?) 
    { 
     // do stuff with the MethodInfo 
    } 
} 

같은 뭔가 :

public class A 
{ 
    public void DoIt(string tmp) 
    { 
    } 
} 

var binder = new Binder() 
binder.Bind<A>(x => x.DoIt); 

대신 :

var method = typeof(A).GetMethod("DoIt"); 
binder.Bind(method); 

는 것이 가능할까요? :)

+1

당신이 MethodInfo 또는 대리인이 원하는 마십시오

public void Bind(Delegate del) { var info = del.Method; //Add your logic here. } 

그리고 그것을하는 방법을 전달하는 :처럼 경우

는 Binder.Bind 것입니까? – SLaks

+0

메소드 정보가 필요합니다. 그러나 문자열을 사용하지 않아도됩니다. – jgauffin

답변

2

대리인으로 메서드를 전달하고 Delegate.Method 속성을 사용합니다.

var binder = new Binder(); 
var instance = new A(); 
binder.Bind(new Action<string>(instance.DoIt)) 
+1

'Delegate'를 전달하는 대신 특정 유형의 델리게이트 만 수락하는 것이 좋을 것입니다.이 경우에는'Action'이 적절하다고 생각됩니다. – Servy

+0

이 경우 실제로는'Action '이 될 것이고 너무 제한적이라고 생각합니다. – Mir

+0

아니요, 'Action '이 아니어야합니다. 왜냐하면 메소드에 전달할 것이 없기 때문입니다. 그는 매개 변수없이 DoIt을 호출하는 인자와 반환 값이없는 메소드를 생성해야한다. 가장 편리한 방법은 람다를 사용하는 것입니다. 실제로 전달되어야하는 문자열이 있다면,'Delegate'를 사용하는 것은 나쁜 생각 일뿐만 아니라 옵션이 되지도 않을 것이고'Action과 같은 특정 유형을 전달할 필요가있을 것입니다. '. – Servy

관련 문제