2012-12-14 95 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

相關問題