2012-12-14 62 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或委托? – SLaks

+0

我想要一个方法信息。但不必使用字符串。 – jgauffin

回答

2

传递的方法作为代表,并使用Delegate.Method属性。

在你的情况Binder.Bind会是这样:

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

并传递给它的方法:

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

不是传递'Delegate',而是接受一个特定类型的委托可能更好,在这种情况下'Action'似乎是合适的。 – Servy

+0

在这种情况下,实际上它应该是'Action ',并且我认为这会太严格。 – Mir

+0

不,不应该是“动作”,因为没有任何东西可以传入该方法。他应该创建一个没有参数和没有返回值的方法,它只需要使用任何参数调用DoIt。最简单的方法是使用lambda。如果确实需要传递一个字符串,那么使用'Delegate'不仅不是一个好主意,而且也不是一个选项,你需要*传递一个特定的类型,比如'Action '。 – Servy

相关问题